我正在使用 node.js、express 和 socket.io
开发实时数据可视化应用程序。
要求:
必须根据客户端请求发出事件。
例如:如果用户输入 url 作为 http://localhost:8080/pages
socket.io 应该发出主题 pages
到客户端和另一个用户对 http://localhost:8080/locations
套接字的请求应该向该特定用户发出 location
。
代码
var server = app.listen("8080");
var socket = require('socket.io');
var io = socket.listen(server);
var config = {};
io.on('connection', function (socket) {
config.socket = io.sockets.socket(socket.id);
socket.on('disconnect', function () {
console.log('socket.io is disconnected');
});
});
app.get('/*', function(req, res) {
var url = req.url;
var eventName = url.substring('/'.length);
//pages and locations
config.socket.volatile.emit(eventName, result);
});
客户端代码:
//No problem in client code.Its working correctly.
Sample code as follows
socket.on('pages', function (result) {
console.log(result);
});
问题:
它向两个客户端发送页面
和位置
。
克服这个问题的任何建议。
最佳答案
我无法理解您对此的处理方式,但是因为您说您正在呈现不同的页面,这意味着您可以提供不同的代码,那么这样做怎么样:
服务器端:
var server = app.listen("8080");
var socket = require('socket.io');
var io = socket.listen(server);
var config = {};
app.get('/pages', function(req, res) {
res.render('pages.html');
});
app.get('/locations', function(req, res) {
res.render('locations.html');
});
io.on('connection', function (socket) {
socket.on('pagesEvent', function(data){
socket.volatile.emit('pages', {your: 'data'});
});
socket.on('locationsEvent', function(data){
socket.volatile.emit('locations', {your: 'data'});
});
});
在客户端:
pages.html:
socket.on('connect', function(){
socket.emit('pagesEvent', {});
});
socket.on('pages', function(data){
// do stuff here
});
locations.html:
socket.on('connect', function(){
socket.emit('locationsEvent', {});
});
socket.on('locations', function(data){
// do stuff here
});
关于node.js - 如何基于客户端在 socket.io 中发出事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21827475/