我有一个Nodejs server.js代码:
var http = require('http');
var express = require('express');
var app = express();
var path = require('path');
var conn= http.createServer(app).listen(3000, function () {
console.log("server Running at Port 3000");
});
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({server: conn});
我有一个带有java脚本的index.html
代码:
<html>
<body>
<script src="myscript.js"></script>
</body>
</html>
在myscript.js
中,我有:
var connection = new WebSocket('ws://localhost:3000');
当我在浏览器上打开http://localhost:3000
时,这种方式运行良好。
var WebSocketServer = require('ws').Server,
wss = new WebSocketServer({ port: 3000}) ;
wss.on('connection', function (connection) {
});
wss.on('listening', function () {
console.log("Server started...");
});
为了明确回答您的问题:为什么web套接字在NodeJS上的行为不同?答案是:不应该。在代码的第二个版本中,您没有向端口3000上的客户机提供任何HTML或JS文件,因此浏览器无法下载任何HTML。
如果希望它按预期工作,则需要向访问http://localhost:3000/的浏览器提供一些HTML和JS文件,否则它将无法连接。
我编写了一些示例代码--服务器端和客户端--说明如何使用WebSocket来完成您在这里尝试做的事情。它在GitHub上可用,我最初写它是为了这个答案:socket.io和WebSockets之间的区别。
var path = require('path');
var app = require('express')();
var ws = require('express-ws')(app);
app.get('/', (req, res) => {
console.error('express connection');
res.sendFile(path.join(__dirname, 'ws.html'));
});
app.ws('/', (s, req) => {
console.error('websocket connection');
for (var t = 0; t < 3; t++)
setTimeout(() => s.send('message from server', ()=>{}), 1000*t);
});
app.listen(3001, () => console.error('listening on http://localhost:3001/'));
console.error('websocket example');
使用vanilla JavaScript的WebSocket客户端示例:
var l = document.getElementById('l');
var log = function (m) {
var i = document.createElement('li');
i.innerText = new Date().toISOString()+' '+m;
l.appendChild(i);
}
log('opening websocket connection');
var s = new WebSocket('ws://'+window.location.host+'/');
s.addEventListener('error', function (m) { log("error"); });
s.addEventListener('open', function (m) { log("websocket connection open"); });
s.addEventListener('message', function (m) { log(m.data); });
来源:https://github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.html
与其调试一个不起作用的代码,有时最好从起作用的东西开始,然后再从那里开始。看看它是如何工作的,可以随意更改它并在您的项目中使用它--它是在麻省理工学院许可下发布的。
服务器: 客户: 服务器开始侦听: 每个客户端连接将获得一个单独的套接字进行通信,所有的套接字都使用相同的服务器端TCP端口进行通信。
我在N主页看到两个版本ode.js下载如下 我应该使用哪一种,有什么区别?
我不明白为什么下面的代码在Java中会出错: 错误发生在部分。错误有: I:\documents\netbeansprojects\testingground\src\testingground\TestClass.java:22:错误:非静态变量这不能从静态上下文引用public static final TestClass常量=new InnerClass(5);^I:\documents\n
问题内容: 在一个Android应用中,我将此代码添加到 onCreate() 进口是: 代码可以编译,但是出现异常: 在不同的上下文中,故障会导致(即 _java.lang.ArrayStoreException:java.net.Socket无法存储在类型为java.io.Closeable []的数组中_ )。 我想念什么吗?知道该怎么办吗? 编辑 类似,当按原样使用时,它会导致 java.
在nodeJS应用程序中,我希望通过其UNIX套接字。我用这个包裹https://mongodb.github.io/node-mongodb-native/?jmp=docs(版本3.1.6),通过这种方式: 此处的文档中引用了URI:https://docs.mongodb.com/manual/reference/connection-string/#unix-域套接字。但在我的例子中,它失
当我进行套接字编程时,我无法清楚地理解。 我的理解是 如果我使用此选项打开套接字,表示我可以在header之前创建自己的header,但最终数据以 /code>协议的格式发送。我的理解是正确的。如果错了,可以一些解释。 谢谢