Tag: 套接字

socket.io客户端到客户端消息传递

我在使用socket.io的基本客户端(或真正的客户端 – >服务器 – >客户端)时遇到了麻烦。 下面是我现在的代码: io.sockets.on('connection', function (socket) { users.push(socket.sessionId); for(userID in users) { console.log(userID); io.sockets.socket(userID).emit('message', { msg: 'New User Connected succesfully' }); } socket.emit('message', { msg: 'Connected succesfully' }); socket.on('my other event', function (data) { console.log(data); }); }); 从我的理解,应该发送新的用户消息给每个连接的用户(单独,因为我想以后做实际的个人消息)。 相反,我最终只能得到“连接成功”的信息。 我没有从我的服务器或客户端得到任何错误或其他负面指标。 任何想法,为什么io.sockets.socket(userID).emit()不起作用或在其位置使用什么?

断开连接后更新客户端的用户列表

美好的一天家伙。 在这里解决我的问题。 我成功地添加了user在我的arraysusers[]在socket.io中显示连接的users在客户端。 当用户断开连接时,用户名将被删除,使用此代码delete users[socket.user]; 但是用户的名字仍然在客户端。 你能帮我取消用户名吗? 谢谢。 这是我的server.js var redis = require('redis'); var express = require('express'); var app = express(); var http = require('http'); var server = http.createServer(app); var io = require('socket.io').listen(server); server.listen(8080); var users = []; app.get('/', function (req, res) { res.sendfile(__dirname + '/test.html'); }); io.sockets.on('connection', function (socket) { socket.on('adduser', function (user) { […]

如何保持一个tcp连接总是打开node.js

我正在构build一个带有nodejs的tcp消息服务器。 它只是坐在我的服务器等待接受连接从让我们说一个Arduino。 因为它在连接时识别出一个唯一的ID(不是IP),所以我可以在不知道客户端设备的IP地址的情况下从服务器arduino中写入数据。 但为了高效,我希望连接尽可能长,最好只要客户端设备closures连接。 (例如,在IP变化或某事) 这是服务器的(相关部分): var net = require('net'), sockets = {}; var tcp = net.createServer(function(soc){ soc.setKeepAlive(true); //- 1 soc.on('connect', function(data){ soc.setKeepAlive(true); //- 2 }); soc.on('data', function(data) { //- do stuff with the data, and after identification // store in sockets{} }) }).listen(1111); 是否soc.setKeepAlive(true)保持连接的正确方法? 如果是这样的话,放什么地方呢? 在连接事件(1)中,或者在callback(2)中。 如果这不是办法,那是什么?

从android的socket.io发送JSON数据

我在android中使用https://github.com/Gottox/socket.io-java-client进行套接字编程。 现在我正在接收JSON响应,现在我想从我的Android应用程序发送JSON数据到这个node.js服务器,请帮助我。 这是我的代码 buttonConnect.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // socket = null; try { SocketIO socket = new SocketIO( "http://104.131.225.38:8001/"); socket.connect(new IOCallback() { @Override public void onMessage(JSONObject arg0, IOAcknowledge arg1) { try { Log.i("Server saidwsssss:", "sssss" + arg0.toString(2)); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onMessage(String arg0, […]

我怎样才能从客户端使用NodeJS的套接字获取标头请求

我对这件事很陌生。 我只是想知道是否有可能获得Web套接字客户端请求标头。 我在服务器端使用node.js: 使用ExpresJS我可以得到如下标题: router.post('/', function (req, res, next) { console.log(req.headers); }); 使用Web Socket,可能吗? var WebSocket = require('ws'); var ws = new WebSocket('ws://www.host.com/path'); ws.on('open', function open() { // how to get the headers ws.send('something'); }); 有可能的? 谢谢

Express.js – 在发送响应之前循环

我试图在node.js中实现和现有的解决scheme,具体来说,使用express.js框架。 现在,现有的解决scheme如下工作: 服务器公开一个客户端可以连接的GET服务 当客户端调用GET服务时,客户端编号会增加(一个全局variables),然后检查客户端的数量; 如果没有连接至less3个客户端,则服务处于无限循环状态,等待其他客户端连接 如果(或者说是什么时候)两个客户端的其余部分连接,服务发送响应给每个有足够客户端连接的客户(“真”值)。 因此,基本上发生的是,客户端连接并且连接处于活动状态(在一个循环中),直到有足够的客户端连接,然后才有响应(同时对所有客户端)。 现在我不是这些架构的专家,但是从我的想法来看,这不是一个正确的或者很好的解决scheme。 我最初的想法是:这必须用socket来解决。 然而,由于现有的解决scheme是这样的(它不是写在node.js中),我试图模拟这样的行为: var number = (function(){ var count = 0; return { increase: function() { count++; }, get: function(){ return count; } }; })(); app.get('/test', function(req, res){ number.increase(); while (number.get() < 3) { //hold it here, until enough clients connect } res.json(number.get()); }); 现在虽然我认为这不是一个正确的解决办法,但我有几个问题: 除了使用套接字之外,还有别的办法来解决这个问题吗? 为什么这个“逻辑”在C#中工作,而不是在express.js中? 上面的代码挂起,没有其他请求处理。 […]

AngularJs和套接字服务器

我即将设置我的node.js / socket.io服务器,但由于这是我第一次使用angular,我有几个问题。 问:是否有任何模块可用的angular度,使套接字连接/通信更容易,或者我将不得不build立自己的模块? 问:由于angular的two way databinding在制作套接字服务器时是否应该注意些什么? 我一直在读博客构build一个简单的聊天应用程序使用Angular和Node,但是我正在寻找更多的全球使用套接字,因为它将在我的应用程序的每个页面上使用。

socket.io通过多个服务器没有redis

我的API端点分布在多个服务器上的多个位置,我想弄清楚如何处理连接客户端上的套接字更新。 我真的想避免有一个单一的Redis数据库设置只是为了处理连接的客户端,通过许多服务器。 我不会必须广播消息,套接字消息将始终发送给单个用户。 虽然我知道每个连接的客户端渠道ID我不知道是否有可能向一个用户发送一条消息,当我手中只有渠道ID,例如最初的连接是与其中一个集群中的另一台服务器。 我看到有一个粘性负载平衡的选项,但我不完全确定这是我真正需要的。 感谢大家可以给我一个更深入的解释什么是最好的办法做到这一点。

为什么socket.io为一个事件返回多次

我刚开始拿起socket.io。 我试图在angular.js中使用它,一切正常。 但是,它多次不断返回 在我的controller.js socketio.emit('GameOver',$scope.currentPlayer.Name); socketio.on('GameOverEmit',function(data){ if(data === $rootScope.user.user_name){ var result = { opponent : rdyplayers.user_name, result : "won" }; // keep getting multiple result console.log(result); }else{ var result = { opponent : rdyplayers.user_name, result : "lose" }; // keep getting multiple result console.log(result); } }); 在我的server.js io.sockets.on('connection', function (client) {​ client.user_name = user.user_name;​ //Useful […]

节点Express每个路由的特定超时值

我正在使用Express v4.13.4开发Node v4.2.4应用程序。 现在我想增加特定上传路由的超时时间。 从我读过的和经历过的 默认的节点服务器超时是2分钟 节点套接字默认没有超时 有Express的中间件来处理超时 但是,在尝试实现上传路由的连接超时中间件时,我迷路了。 应用程序设置 const app = express(); app.use(cors()); app.use(bodyParser.json({ limit: '50mb' })); app.use(bodyParser.urlencoded({ limit: '50mb', extended: false })); app.use(passport.initialize()); app.use('/uploads', uploadRoutes); app.use(errorHandler); function errorHandler(err, req, res, next) { if (err.code && err.code === 'ETIMEDOUT') { if (!res.headersSent) { res .status(408) .send({ success: true, message: 'Timeout error' }); } […]