在iisnode部署PeerJS服务器,客户端无法正常连接(状态异常)
解决方案
1. 修正web.config的重写规则与WebSocket配置
iisnode环境下路径需使用正斜杠,且需显式启用WebSocket支持,修改后的web.config如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <!-- 启用WebSocket协议支持 --> <webSocket enabled="true" /> <handlers> <add name="iisnode" path="node_app.js" verb="*" modules="iisnode" /> </handlers> <rewrite> <rules> <rule name="ws" patternSyntax="ECMAScript" stopProcessing="true"> <match url="^NodeJS/WebSocket/WS/?$" /> <action type="Rewrite" url="/NodeJS/WebSocket/WS/node_app.js" /> </rule> <rule name="peerjs" patternSyntax="ECMAScript" stopProcessing="true"> <match url="^NodeJS/PeerJS/Server(.*)$" /> <!-- 保留请求的后缀参数,确保PeerServer能获取完整请求信息 --> <action type="Rewrite" url="/NodeJS/PeerJS/Server/node_app.js{R:1}" /> </rule> </rules> </rewrite> <!-- 指定node.exe路径,确保iisnode能正确启动进程 --> <iisnode nodeProcessCommandLine=""%programfiles%\nodejs\node.exe"" /> </system.webServer> </configuration>
2. 调整PeerServer的挂载路径
客户端请求路径为/NodeJS/PeerJS/Server/,服务端需将PeerServer挂载到对应路径,修改服务端代码:
// peer_server var ExpressPeerServer = require('peer').ExpressPeerServer; var peerExpress = require('express'); var peerApp = peerExpress(); var peerServer = require('http').createServer(peerApp); var options = { debug: true } var peerPort = process.env.PORT; // 挂载到与客户端匹配的路径 peerApp.use('/NodeJS/PeerJS/Server', ExpressPeerServer(peerServer, options)); peerServer.listen(peerPort);
3. 修正客户端PeerJS配置
匹配服务端挂载路径,并显式设置HTTPS环境下的WebSocket安全选项:
window.addEventListener('load', function() { var thisCallerID = 123; peerJS = new Peer(thisCallerID,{ host: location.hostname, path: '/NodeJS/PeerJS/Server', // 与服务端挂载路径完全一致 debug: 1, secure: true // 适配wss协议(HTTPS环境) }); });
4. 验证IIS环境配置
- 确认IIS已安装WebSocket协议(通过服务器管理器的角色功能添加)
- 重启IIS服务和node进程,确保所有配置生效
内容的提问来源于stack exchange,提问作者Hilton Siegert
相关产品推荐
相关产品推荐

