需要升级(node.js)
我使用webRTC制作了信令服务器。 这就是为什么我做了信令服务器(signaling.js)。
我该怎么办才能解决这个问题?
·signaling.js
"use strict"; let WebSocketServer = require('ws').Server; let port = 3001; let wsServer = new WebSocketServer({ port: port }); console.log('websocket server start. port=' + port); wsServer.on('connection', function(ws) { console.log('-- websocket connected --'); ws.on('message', function(message) { wsServer.clients.forEach(function each(client) { if (isSame(ws, client)) { console.log('- skip sender -'); } else { client.send(message); } }); }); }); function isSame(ws1, ws2) { // -- compare object -- return (ws1 === ws2); } let wsUrl = 'ws://localhost:3001/'; let ws = new WebSocket(wsUrl); ws.onopen = function(evt) { console.log('ws open()'); }; ws.onerror = function(err) { console.error('ws onerror() ERR:', err); }; ws.onmessage = function(evt) { console.log('ws onmessage() data:', evt.data); let message = JSON.parse(evt.data); if (message.type === 'offer') { // -- got offer --- console.log('Received offer ...'); textToReceiveSdp.value = message.sdp; let offer = new RTCSessionDescription(message); setOffer(offer); } else if (message.type === 'answer') { // --- got answer --- console.log('Received answer ...'); textToReceiveSdp.value = message.sdp; let answer = new RTCSessionDescription(message); setAnswer(answer); } }; function sendSdp(sessionDescription) { console.log('---sending sdp ---'); textForSendSdp.value = sessionDescription.sdp; /*--- テキストエリアをハイライトするのを止める textForSendSdp.focus(); textForSendSdp.select(); ----*/ // --- シグナリングサーバーに送る --- let message = JSON.stringify(sessionDescription); console.log('sending SDP=' + message); ws.send(message); }
当我加载“signaling.js”时,我设置了node.js. 之后,我访问signaling.js。 但是,它列出了所需的升级。
我search了如何升级node.js.
我试过了
Linux/Mac: The module n makes version-management easy: sudo npm install n -g sudo n 0.12.2 For the latest stable version: sudo n stable For the latest version: sudo n latest
在此之后,我访问了signaling.js
/signaling.js:26 let ws = new WebSocket(wsUrl); ^ ReferenceError: WebSocket is not defined at Object.<anonymous> (/Users/Desktop/webRTC/signaling.js:26:16) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Module.runMain (module.js:604:10) at run (bootstrap_node.js:394:7) at startup (bootstrap_node.js:149:9) at bootstrap_node.js:509:3
看起来你正在尝试在同一个脚本中创build一个WebSockets客户端和服务器。
/signaling.js:26 let ws = new WebSocket(wsUrl); ^ ReferenceError: WebSocket is not defined
发生此错误的原因是您忘记在文件的顶部定义WebSocket
variables:
var WebSocket = require('ws');
既然你想使用和你在Web浏览器中一样的方法( ws.onopen
, ws.onerror
,…),我build议你使用websocket
包,而不是w3cwebsocket
模块。
var WebSocket = require('websocket').w3cwebsocket;
在讨论这个问题之后,我想build议你完全删除'ws'
包,而不是使用'websocket'
。
var WebSocketServer = require('websocket').server;
不要直接创buildWebSocket服务器,而应该先创build一个HTTP服务器:
var server = http.createServer(function(request, response) { console.log((new Date()) + ' Received request for ' + request.url); response.writeHead(404); response.end(); }); server.listen(8080, function() { console.log((new Date()) + ' Server is listening on port 8080'); });
然后在其上附加WebSocket服务器:
wsServer = new WebSocketServer({ httpServer: server, autoAcceptConnections: false });
新的连接将触发request
事件,您将不得不接受传入的连接:
// wsServer.on('connection', function(ws) { wsServer.on('request', function(request) { var ws = request.accept();
您将能够检索connections
属性的客户端列表。
// wsServer.clients.forEach(function each(client) { wsServer.connections.forEach(function each(client) {