使用socket.io和express的多个唯一客户端
multiple unique clients using socket.io and express
我正在使用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以获得一些更好的例子。
或为文件添加一个动态处理程序:
app.get('/myApp/:file', function(req, res) {
res.sendfile(__dirname+'/'+req.param('file'));
});
或者用正则表达式来增强它:
app.get(/^'/myApp'/(.+)'.html$/, function(req, res) {
res.sendfile(__dirname+'/'+req.params[0]);
});
相关文章:
- 客户端服务器REST API captcha实现
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 如何使用Socket.io将命令从客户端发送到服务器
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- Meteor针对唯一客户端集合的发布/订阅策略
- 如何生成一个唯一的链接,该链接将加载一个会话,其中包含客户端可用的某些文档
- 为客户端和服务器上的对象生成唯一 ID
- 跨多个客户端和服务器生成真正的全局唯一 ID
- 使用socket.io和express的多个唯一客户端
- 安全性:使用仅客户端代码创建唯一的用户连接
- Yii2实现输入字段的客户端唯一验证
- 客户端机器唯一ID
- Node.js:使用唯一的公钥认证客户端(类似于Github SSH密钥认证)
- 从chrome扩展中获得唯一的客户端id
- 在Intranet Meteor/Javascript上获取唯一的客户端IP或MAC地址
- 唯一标识向Web API发出请求的客户端的内容
- 流星应用程序:如何在不使用帐户的情况下获取唯一的会话/客户端ID
- cookie是向客户端提供来自服务器的指令来执行一些js代码的唯一方法吗?