socket.IO一次只能连接一个客户端(浏览器)

时间:2014-08-06 06:02:35

标签: node.js socket.io

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

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

如果我有两个客户端,第一个打开http网站的人获得套接字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' });

 });

1 个答案:

答案 0 :(得分:0)

而不是使用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
});

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