Tôi đã viết một mã để phát một thông báo cho tất cả người dùng:
// websocket and http servers
var webSocketServer = require('websocket').server;
...
...
var clients = [ ];
var server = http.createServer(function(request, response) {
// Not important for us. We're writing WebSocket server, not HTTP server
});
server.listen(webSocketsServerPort, function() {
...
});
var wsServer = new webSocketServer({
// WebSocket server is tied to a HTTP server.
httpServer: server
});
// This callback function is called every time someone
// tries to connect to the WebSocket server
wsServer.on('request', function(request) {
...
var connection = request.accept(null, request.origin);
var index = clients.push(connection) - 1;
...
Xin hãy chú ý:
- Tôi không có bất kỳ tham chiếu người dùng nào mà chỉ có một kết nối.
- Tất cả kết nối người dùng được lưu trữ trong một
array
.
Mục tiêu : Giả sử máy chủ Node.js muốn gửi một thông báo đến một máy khách cụ thể (John). Làm sao máy chủ NodeJs biết John có kết nối nào? Máy chủ Node.js thậm chí không biết John. tất cả những gì nó thấy là các kết nối.
Vì vậy, tôi tin rằng bây giờ, tôi không nên lưu trữ người dùng chỉ bằng kết nối của họ, thay vào đó, tôi cần lưu trữ một đối tượng, nó sẽ chứa userId
và connection
đối tượng.
Ý tưởng:
Khi trang hoàn tất tải (DOM sẵn sàng) - thiết lập kết nối với máy chủ Node.js.
Khi máy chủ Node.js chấp nhận một kết nối - tạo một chuỗi duy nhất và gửi nó đến trình duyệt máy khách. Lưu trữ kết nối người dùng và chuỗi duy nhất trong một đối tượng. ví dụ
{UserID:"6", value: {connectionObject}}
Ở phía khách hàng, khi tin nhắn này đến - hãy lưu trữ nó trong một trường ẩn hoặc cookie. (cho các yêu cầu trong tương lai tới máy chủ NodeJs)
Khi máy chủ muốn gửi tin nhắn cho John:
Tìm UserID của john trong từ điển và gửi tin nhắn bằng kết nối tương ứng.
xin lưu ý rằng không có mã máy chủ asp.net nào được đưa vào đây (trong cơ chế tin nhắn). chỉ NodeJs. *
Câu hỏi:
Đây có phải là cách thích hợp để đi không?