相关疑难解决方法(0)

使用socket.io和node.js将消息发送到特定客户端

我正在使用socket.io和node.js,直到现在看起来还不错,但我不知道如何从服务器向特定客户端发送消息,如下所示:

client.send(message, receiverSessionId)
Run Code Online (Sandbox Code Playgroud)

但是这些.send().broadcast()方法似乎都不能满足我的需要.

我发现作为一种可能的解决方案是,该.broadcast()方法接受一个不发送消息的SessionIds数组作为第二个参数,因此我可以将当​​前连接的所有SessionId的数组传递给服务器,除了一个我希望发送消息,但我觉得必须有更好的解决方案.

有任何想法吗?

javascript server-side websocket node.js socket.io

179
推荐指数
10
解决办法
21万
查看次数

使用node.js和socket.io在密钥之间创建私人聊天

如何使用node.js和socket.io向共享conversation_id的私人聊天中的所有用户发送消息?

var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);
conversations = {};

app.get('/', function(req, res) {
res.sendfile('/');
});

io.sockets.on('connection', function (socket) {

socket.on('send message', function (data) {

    var conversation_id = data.conversation_id;

    if (conversation_id in conversations) {

        console.log (conversation_id + ' is already in the conversations object');

        // emit the message [data.message] to all connected users in the conversation

    } else {
        socket.conversation_id = data;
        conversations[socket.conversation_id] = socket;

        conversations[conversation_id] = data.conversation_id;

        console.log ('adding '  + conversation_id …
Run Code Online (Sandbox Code Playgroud)

javascript chat node.js socket.io

24
推荐指数
2
解决办法
4万
查看次数

与socket.io私聊

我的聊天应用程序遇到问题,我需要能够向特定用户发送私人消息,我能够选择该特定用户但由于某种原因无法弄清楚如何发送私人消息.

您可以在下面找到我服务器的代码,请帮助:

var express = require('express');
var app = express();
var PORT = process.env.PORT || 8000;
var http = require('http').Server(app); // this is a node server that uses express as the boiler plate
var io = require('socket.io')(http); // socket! pass our server as a parameter to it


// use express static to expose a folder
app.use(express.static(__dirname + '/public'));

var users = [],
	connections = [];
var onlineClients = {};




// Register events on socket connection
io.on('connection', function(socket){ 
	connections.push(socket);
	// console.log("connected …
Run Code Online (Sandbox Code Playgroud)

node.js socket.io

6
推荐指数
1
解决办法
1万
查看次数

SocketIO 发送给特定用户(无需为每个客户端使用单独的空间)

我正在尝试开发一个支持后端长任务的网络应用程序。我在我的服务器上使用flask-socketio包和芹菜。我的工作流程如下:

  1. 当客户端打开 Html 页面时,我启动到服务器的套接字连接,该连接为用户创建一个 uid 并将其发回。
  2. 现在,一旦用户发布了对长任务的请求——我使用 celery 来安排它,一旦完成,我需要将其发送给发布请求的用户。(我在post请求中存储了相关的userid)

我查看了 @Miguels 对39423646/flask-socketio-emit-to-specific-user的回答,它为每个用户创建一个单独的房间,然后在该房间上广播消息。但我想问是否有其他更简单的方法来做到这一点,因为它似乎效率低下或强制的方式来做到这一点。

我还遇到了nodejs解决方案(how-to-send-a-message-to-a-preferred-client-with-socket-io),我觉得这是实现这一目标的更自然的方式。python-socketio 中也有类似的解决方案吗?


更新:经过更多搜索后,我在 github gist 上发现了以下解决方案。据此 -- ** flash-socketIO 已经将所有客户端放在request.sid** 指定的单独房间中。

我仍然希望讨论其他方法来做到这一点。具体来说,如果网站流量相当高,是否会导致房间过多?


更新(2)我当前的(工作)服务器代码使用 rooms这是从flask-SocketIO celery示例借用并修改的

@celery.task(bind=True)
def long_task(self, userid, url):
    # LONG TASK
    time.sleep(10)
    # meta = some result
    post(url, json=meta) 
    # It seems i can't directly emit from celery function so I mimic a post request and emit from that …
Run Code Online (Sandbox Code Playgroud)

python socket.io flask-socketio python-socketio

4
推荐指数
1
解决办法
2040
查看次数