簡體   English   中英

Socket.io 1.x + Express(使用http):如何將消息發送到特定的客戶端ID?

[英]Socket.io 1.x + Express (using http): How to send messages to specific client id?

我是socket.io的新手,並且正在使用NodeJS(表達4)做一個簡單的API。 我正在開發類似於Facebook上的舊“戳”操作的操作。 一個用戶向其他用戶發送戳,並且該戳實時得到通知(這就是我使用socket.io的原因)。

這是代碼:

app.js

var port   = 3000;
var app    = module.exports = express();
var server = require('http').Server(app);
...
server.listen(port);
require('./config/socket-io')(app, server, secret);

插座io.js

module.exports = function(app, server, secret) {
    var clients = {};
    console.log("initiating sockets...");
    var sio = require('socket.io').listen(server, {'log level': 2});

    sio.on('connection', function (socket) {
        console.log("...new connection: "+socket.client.id);
        clients[socket.id] = socket;
        socket.emit('identification', { data : socket.client.id });

        socket.on('newShoutOut', function(data) {
            var receptor    = data.idTo;
            var emiter      = socket.client.id;
            console.log("...new shout out from " +emiter+ " to "+receptor);
            sio.sockets.sockets[receptor].emit({ data : data.data, from : emiter });
        });

        socket.on('disconnect', function() {
            console.log("..."+socket.client.id + " disconnected");
        });
    });
};

在這里,您可以區分三種狀態:

  • 連接:服務器檢測到所有客戶端與host:port的連接。 之后,服務器將其ID發送給每個客戶端。 這很好。

  • 發送消息:一個客戶端向另一個客戶端發送通知。 目前,服務器從一個客戶端接收通知,但是“接收者”什么也沒有接收到。

  • 斷開連接:在這種情況下無關緊要。

我的問題是,直接向該ID發送消息給客戶端的方式是什么? 我做錯了什么? 我嘗試了很多選項,直接將消息發送到特定的客戶端ID,但是沒有用...

編輯

前端

var socket = io('http://localhost:3000');
var id = "";
socket.on('connection', function (data) {
    console.log("connected!");
    console.log(data);
});
socket.on('identification', function(data) {
    id = data.data;
    $("#socket_info h1").html("ID: "+id);
});
socket.on('newShoutOut', function(data) {
    console.log("newShoutOut received!");
});

好吧,所以我假設喊聲來自用戶? 您將需要在客戶端上創建事件,例如:

var button = $('#button');

button.on('click', function() {
    var msg = 'message',
        userID = '123'; //get the ID who they are messaging

    socket.emit('sendShoutOut', {msg: msg, id: userID});
});

然后,您將需要在服務器上接收該響應,並使用該函數回復用戶:

socket.on('sendShoutOut', function( data ) {

    socket.sockets.sockets[data.id].emit('sendPrivateMsg', { data : data.msg, from : emiter });
});

最后,必須通知接收方,因此您需要在客戶端上處理響應:

socket.on('sendPrivateMsg', function( data ) { 
    alert(data);    
});

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM