【问题标题】:socket.IO can only connect one client (browser) at a timesocket.IO 一次只能连接一个客户端(浏览器)
【发布时间】:2014-08-06 22:35:43
【问题描述】:

我在使用套接字 IO 将我的服务器连接到客户端(http 网站)时遇到问题。

在客户端上,我有一个按钮,按下该按钮会将数据发送到服务器。但是,这只适用于一个客户。

如果我有两个客户端,第一个打开http网站的人获得socket IO连接,而第二个可以打开页面,但不能向服务器发送任何数据。

在客户端:

 var socket = new io.connect('ServerIP:8090');
 socket.on('message', function(obj){
       if ('buffer' in obj){
         //ignore this
    } else message(obj);
  });

在服务器端:

 var io = io.listen(server)
  , buffer = [];

io.on('connection', function(client)
 {

  client.send({ buffer: buffer });
  client.broadcast.send({ announcement: client.sessionId + ' connected' });

  chatGuests.push(client);

  client.on('message', function(message){
  var msg = { message: [client.sessionId, message] };
  buffer.push(msg);
  if (buffer.length > 15) buffer.shift();
  client.broadcast.send(msg);

 });

 client.on('disconnect', function(){
 client.broadcast.send({ announcement: client.sessionId + ' disconnected' });

 });

【问题讨论】:

标签: node.js socket.io


【解决方案1】:

不要使用client.broadcast.send(something)client.send(something),而是使用io.emit('eventName', something)。此外,要使用变量 io 设置服务器,请使用

var socket = require('socket.io');
var http = require('http');
var express = require('express');

var app = express();
var server = http.createServer(app);

var io = socket.listen(server);

然后在你的代码之后:

server.listen(8090);

这允许你使用 node.js 模块 express,它允许客户端和服务器之间的额外通信(但不需要你重写你的 socket.io 代码)。

对于您的客户端代码,而不是使用:

socket.on('message', function(obj){
//Do something
});

用途:

socket.on('eventName', function(something){
//Do something
});

这适用于多种数据传递,而不仅仅是消息。你可以让多个事件监听器分别做不同的事情

【讨论】:

    猜你喜欢
    • 2021-01-05
    • 1970-01-01
    • 2019-01-18
    • 2015-01-30
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多