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

3
我遇到了使用Socket 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' });

 });

socket.io 网站 学习逐步构建聊天服务器的方法。 - Alvin K.
1个回答

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
});

这适用于多种数据传递,不仅限于消息。您可以为每个事件侦听器添加多个以执行不同的操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接