gpt4 book ai didi

javascript - 如何在 Node.js 中定义分水岭?

转载 作者:行者123 更新时间:2023-12-03 05:44:14 25 4
gpt4 key购买 nike

当我执行以下代码时,出现错误:引用错误:未定义分水岭。我该如何定义它?我需要为其安装模块吗?

var restify=require('restify');
var ws= new Watershed();
var server=restify.createServer();
server.get('websocket/attach', function upgradeRoute(req, res, next){
if(!res.claimUpgrade){
next(new Error("Connection must be upgraded."));
return;
}
var upgrade=res.claimUpgrade();
var shed=ws.accept(req, upgrade.socket, upgrade.head);
shed.on('text', function (msg){
console.log("The message is: "+msg);
});
shed.send("hello there");
next(false);
});
server.listen(8081, function(){
console.log('%s listening at %s', server.name, server.url);
});

最佳答案

restify 文档中还有一部分提到了如何处理升级套接字的功能。我为此苦苦挣扎了很长一段时间,并认为我应该分享一个简单的解决方案。除了@Dibu Raj回复之外,您还需要创建restify服务器,并将handleUpgrades选项设置为true。以下是使 Restify 与 Websocket 升级和分水岭配合使用的完整示例:

'use strict';
var restify = require('restify');
var watershed = require('watershed');
var ws = new watershed.Watershed();

var server = restify.createServer({
handleUpgrades: true
});

server.get('/websocket/attach', function (req, res, next) {
if (!res.claimUpgrade) {
next(new Error('Connection Must Upgrade For WebSockets'));
return;
}
console.log("upgrade claimed");

var upgrade = res.claimUpgrade();
var shed = ws.accept(req, upgrade.socket, upgrade.head);

shed.on('text', function(msg) {
console.log('Received message from websocket client: ' + msg);
});

shed.send('hello there!');

next(false);
});

//For a complete sample, here is an ability to serve up a subfolder:
server.get(/\/test\/?.*/, restify.serveStatic({
directory: './static',
default: 'index.html'
}));

server.listen(8080, function() {
console.log('%s listening at %s', server.name, server.url);
});

要使用 html 页面来测试新的 Nodejs Websocket 服务器:将此 html 写入以下文件中:./static/test/index.html - 将浏览器指向 http://localhost:8080/test/index.html - 打开浏览器调试控制台以查看消息交换。

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Web Socket test area</title>
<meta name="description" content="Web Socket tester">
<meta name="author" content="Tim">
</head>
<body>
Test Text.
<script>
(function() {
console.log("Opening connection");
var exampleSocket = new WebSocket("ws:/localhost:8080/websocket/attach");
exampleSocket.onopen = function (event) {
console.log("Opened socket!");
exampleSocket.send("Here's some text that the server is urgently awaiting!");
};
exampleSocket.onmessage = function (event) {
console.log("return:", event.data);
exampleSocket.close();
}
})();
</script>
</body>
</html>

您的浏览器日志将如下所示:

07:05:05.357 index.html:18 Opening connection
07:05:05.480 index.html:22 Opened socket!
07:05:05.481 index.html:26 return: hello there!

您的 Node 日志将如下所示:

restify listening at http://[::]:8080
client connected!
Rest service called started
upgrade claimed
Received message from websocket client: Here's some text that the server is urgently awaiting!

相关文档位于: http://restify.com/#upgrade-requests

关于javascript - 如何在 Node.js 中定义分水岭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40397325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com