我已经使用WS模块创建了一个iisnode WebSocket服务器. 我遇到的问题是,尽管客户端将字符串数据发送到服务器,但服务器以二进制消息的形式接收数据.

客户端JS

var socket; 
window.addEventListener('load', function(){ 
    socket = new WebSocket('wss://server/ws/');
    
    socket.addEventListener('open', function (event) {
        console.log('Hello Server!');
        socket.send('Hello Server!');
    });
    
    socket.addEventListener('message', function (event) {
        console.log('Message from server : ', event.data);
    });
    
    socket.onerror = function(event){
        console.log('Error : ', event);
    }; 
    
    socket.onclose = function(event){
        console.log('Close : ', event);
    }; 
}); 

服务器端JS

var express     = require("express"); 
var app         = express(); 
var WebSocket   = require("ws"); 

var server = app.listen(process.env.PORT, function(){
    console.log("listening");
});

var wss = new WebSocket.Server({"server":server}); 
wss.on("connection", function(user){ 
    user.send("connected"); 
    user.on("message", function(message){ 
        wss.clients.forEach(function(client){ 
            if(client.readyState===WebSocket.OPEN){ 
                client.send(typeof(message)); 
                client.send(message); 
            }; 
        }); 
    }); 
}); 

app.get("/ws/", function(req, res) {
    res.send("WebSocket");
});

Web.cofig

<?xml version="1.0" encoding="UTF-8"?>
<configuration> 
    <system.webServer>
        <handlers>
            <add name="iisnode" path="node_app.js" verb="*" modules="iisnode" />
        </handlers>
        <rewrite>
            <rules>
                <rule name="ws" patternSyntax="ECMAScript" stopProcessing="true">
                    <match url="^ws/?$" />
                    <action type="Rewrite" url="\ws\node_app.js" />
                </rule>
            </rules>
        </rewrite>
        <webSocket enabled="false" />
    </system.webServer> 
</configuration>

当我运行代码时,我得到的数据是:

| ↑↓       | Data           | Value                                                            |
| -------- | -------------- | ---------------------------------------------------------------- |
| ↑        | Hello Server!  | Hello Server!                                                    |
| ↓        | connected      | connected                                                        |
| ↓        | object         | object                                                           |
| ↓        | Binary Message | 00000000: 4865 6c6c 6f20 5365 7276 6572 21         Hello Server! |

从我在网上看到的一切来看,我在服务器端收到的数据应该是一个AS字符串"Hello Server!"所以我不确定为什么数据服务器端是对象?

推荐答案

因此,在我读过的所有文章中,没有人提到这一点,但似乎有message.toString()人做到了这一点.

服务器端JS

var express     = require("express"); 
var app         = express(); 
var WebSocket   = require("ws"); 

var server = app.listen(process.env.PORT, function(){
    console.log("listening");
});

var wss = new WebSocket.Server({"server":server}); 
wss.on("connection", function(user){ 
    user.send("connected"); 
    user.on("message", function(message){ 
        var message = message.toString(); 
        wss.clients.forEach(function(client){ 
            if(client.readyState===WebSocket.OPEN){ 
                client.send(typeof(message)); 
                client.send(message); 
            }; 
        }); 
        message = null; 
    }); 
}); 

app.get("/ws/", function(req, res) {
    res.send("WebSocket");
});

Javascript相关问答推荐

带对角线分隔符的图像滑动器

访客柜台的风格React.js

如何循环访问对象数组并以关键值形式获得结果?

强制执行useStatego struct 化变量[foo,setFoo]的命名约定?

为什么在集内和集外会产生不同的promise 状态(使用Promise.race)?

如何使用React渲染器放置根dis?

如何使用Echart 5.5.0创建箱形图

无法在nextjs应用程序中通过id从mongoDB删除'

给定一个凸多边形作为一组边,如何根据到最近边的距离填充里面的区域

在执行异步导入之前判断模块是否已导入()

如何通过将实例方法的名称传递给具有正确类型的参数的继承方法来调用实例方法?

如何在文本字段中输入变量?

类构造函数不能在没有用With Router包装的情况下调用

类构造函数忽略Reaction Native中的可选字段,但在浏览器中按预期工作

在使用REACT更改了CSS类之后,无法更改CSS样式

在css中放置所需 colored颜色 以填充图像的透明区域

元素字符串长度html

有没有一种直接的方法可以深度嵌套在一个JavaScript对象中?

将Auth0用户对象存储在nextjs类型脚本的Reaction上下文中

在Puppeteer中使用promise进行日志(log)记录时出现TargetCloseError