javascript - 使用socket.io 和express 的多个唯一客户端

标签 javascript node.js express socket.io

我正在使用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.htmlhttp://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/

相关文章:

javascript - 如何创建用于模式切换的jquery计数器函数

node.js - 持续服务器端 Firebase 监控的方法(Web 应用程序)

javascript - 等待 bluebird Promise 内的可选流程操作

javascript - 在 R Shiny 中显示 knobInput 后​​添加百分比符号

javascript - 通过属性对数组内的数组重新排序的最佳方法

javascript - 如何使用 angularjs 从 JSON 对象中删除项目

node.js - AWS EC - 如何永久运行 phantomjs 服务器

javascript - pug 中的迭代出错

node.js - 在 Node.js 中异步查询多个 MongoDB 集合

javascript - 在我刷新页面之前,socket.io 输出是未定义的,然后它就会显示出来?