WSO2 websocket+;SockJS-阻止跨源请求

WSO2 websocket+;SockJS-阻止跨源请求,websocket,wso2,wso2esb,sockjs,Websocket,Wso2,Wso2esb,Sockjs,由于WSO2 5.0支持WebSockets,我编写了一个简单的应用程序,下面是教程: 以下是我从WSO2获得的源代码视图输出: 15000 消息中介的主序列 9091 0 outDispatchSeq 过错 我能够用Nett客户端成功地测试它: C:\work\servers\netty>java -Durl=ws://localhost:9091/websocket -DsubProtocol="synapse(contentType='application/xml')"

由于WSO2 5.0支持WebSockets,我编写了一个简单的应用程序,下面是教程:

以下是我从WSO2获得的源代码视图输出:


15000
消息中介的主序列
9091
0
outDispatchSeq
过错
我能够用Nett客户端成功地测试它:

C:\work\servers\netty>java -Durl=ws://localhost:9091/websocket -DsubProtocol="synapse(contentType='application/xml')" -cp netty-example-4.1.4.Final.jar;lib/*;. io.netty.example.http.websocketx.client.WebSocketClient
WebSocket Client connected!
但是,如果我尝试从JavaScript代码测试它,我会得到如下错误:


你知道我的代码有什么问题吗?

发生此问题的原因是SockJS内部试图使用
XMLHttpRequest
加载URL,但Chrome不允许访问跨源内容,除非协议是上述协议之一(在本例中为
ws://)
。我曾在Firefox上尝试过类似的场景,效果很好,因为它没有Chrome特有的限制

在这个场景中,由于WSO2 ESB公开了一个WebSocket接口来调用HTTP端点,因此您可以使用本机HTML5 WebSocket实现,如下所示

var url='ws://localhost:9091/websocket';
var ws=新的WebSocket(url);
ws.onopen=函数(){
//待办事项
}
ws.onmessage=函数(e){
//待办事项
}