我正在使用socket.io 和express,并且我正在努力拥有所有从服务器发送和接收消息的独特页面。
当我遵循大多数教程时,服务器脚本以如下内容开始:
var app = require('express').createServer()
var io = require('socket.io').listen(app);
var clients = {};
app.listen(8080);
// routing
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
我可以在 localhost:8080 测试我的客户端应用程序。但我想要的是运行多个客户端应用程序,如 http://localhost:8080/myApp/client1.html和 http://localhost:8080/myApp/client2.html 。当我尝试这个时,它返回类似:
Cannot GET /myApp/client1.html
我的目标是拥有两个或更多可以通过套接字相互发送消息的独特页面。任何帮助是极大的赞赏。我已经为此烦恼太久了。
最佳答案
我对 Express 不太熟悉,但直觉告诉我 get() 会引用 GET HTTP 请求,因此不是 websocket。我认为您应该使用 Express 返回页面请求的 HTML,但实时数据传输将由 Socket.io 处理。
因此,您将获得实际页面请求的 Express 返回:
app.get('/myApp/client1.html', function(blah){});
app.get('/myApp/client2.html', function(blah){});
然后socket.io会处理谈话:
var io = require('socket.io').listen(app);
io.sockets.on('connection', function (socket) {
socket.on('msg', function (data) {
io.sockets.emit('msg', {msg: data.msg});
});
});
客户:
var socket = io.connect('http://localhost:8080');
socket.on('msg', function (data) {
//code to add data.msg somewhere on page
});
somebutton.on('click', function(e){
socket.emit('msg', {msg:$(e.targetElement).value()});
});
再说一次,我不了解 Express,所以我的语法可能有错误,但我的要点是,有两件事需要单独处理。一是实际HTML页面的返回,二是加载页面之间的实时数据通信。我的例子很粗糙,请查看 Socket.io Readme一些更好的例子。
关于javascript - 使用socket.io 和express 的多个唯一客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9928395/