websocket连接失败?
Posted
技术标签:
【中文标题】websocket连接失败?【英文标题】:websocket connection fails? 【发布时间】:2014-03-31 08:59:32 【问题描述】:我是 Web 套接字的新手,并尝试使用 asp.net 通用处理程序和 javascript WebSocket 类创建一个
JavaScript
<script type="text/javascript">
window.onload= function ()
var name = prompt('what is your name?:');
var url = 'ws://localhost:5707/ws.ashx?name=' + name;
var ws = new WebSocket(url);
ws.onopen = function ()
alert('Connection Opened');
;
ws.onmessage = function (e)
;
ws.onclose = function ()
alert('Connection Close');
;
ws.onerror = function (e)
alert('Error')
;
</script>
称为 ws.ashx 的 C# 通用处理程序
public class ws : IHttpHandler
public void ProcessRequest(HttpContext context)
if (context.IsWebSocketRequest)
context.AcceptWebSocketRequest(new TestWebSocketHandler());
public bool IsReusable
get
return false;
类TestWebSocketHandler继承自WebSocketHandler
public class TestWebSocketHandler : WebSocketHandler
private static WebSocketCollection clients = new WebSocketCollection();
private string name;
public override void OnOpen()
this.name = this.WebSocketContext.QueryString["name"];
clients.Add(this);
clients.Broadcast(name + " has connected.");
public override void OnMessage(string message)
clients.Broadcast(string.Format("0 said: 1", name, message));
public override void OnClose()
clients.Remove(this);
clients.Broadcast(string.Format("0 has gone away.", name));
我的问题是
当 websocket 打算打开时,我注意到当去处理程序时,
context.IsWebSocketRequest // returns false
然后它在客户端上触发错误说
Firefox 无法与位于 ws://localhost:5707/ws.ashx?name=j 的服务器建立连接
然后关闭连接实例化
我需要知道问题出在哪里?好心
我在 windows 7 下使用 vs 2013,我认为它是我工作的 IIS 6
【问题讨论】:
您是否使用过 fiddler 或类似工具来查看正在发送/接收的内容? 不,但它将如何提供帮助 实际上,您可能需要使用 firefox 工具;切换到网络选项卡,找到网络套接字连接,然后查看标题。例如,这是我的网站 (***.com):i.stack.imgur.com/goQTY.png - 你对你的网站有什么看法?另外:它可以在 Chrome 中使用吗? 不,它适用于非前 5 种浏览器:( 【参考方案1】:恐怕WebSockets 只能在Windows 8 或Windows 2012 上运行的ASP.NET 应用程序上运行。尽管 API 包含在 .NET 4.5.1 中,但如果您不使用这些操作系统,它将无法工作。实际上,如果你尝试使用ClientWebSocket
,它会抛出一个PlatformNotSupportedException
。
如果您无法获得这些操作系统中的任何一个,您可以检查替代方案:
XSocket.NET:http://xsockets.net/ SuperWebSocket : http://superwebsocket.codeplex.com/ Alchemy Websocket:http://alchemywebsockets.net/ WebSocket 监听器:https://github.com/vtortola/WebSocketListener【讨论】:
也许你是对的,但是你给我的参考文献中的这些工具是用来处理 .net/ 上的 websockets 的,另一方面,我使用 .net 框架 3.5.1 它不支持吗网络套接字??或者它与 IIS 版本有关?? @Marwan 啊,我没有看到 Win 7 - 重要的是操作系统版本;这个使用的 web-sockets 层被烘焙到 http.sys 中;但是,如果您真的无法使用其他操作系统,则可以使用其他 Web 套接字 API 他们可能都使用普通套接字。我开发了WebSocketListener
,它使用普通的TcpListener
来获取Socket
对象并协商WebSocket 会话。我不会在 3.5.1 中工作。新的 http.sys 提供了将普通 HTTP 请求转换为 WebSocket 连接的能力,因此您可以在与网页相同的端口上运行 Websocket。另一方面,我提出的那些替代方案需要作为 IIS 外部的服务在不同的端口中运行。 MS 表示这是一个太大的变化,无法在 Windows 7 或 Windows Server 2008 中引入它。
@vtortola 当然,一种选择是简单地使用 NLB 将发往 web-socket 服务器的请求发送到不同的后端节点。不是我们自己做的(我们为 web-sockets 使用不同的域),但它应该可以工作。
我已经走得太远了,我无法理解它我认为我需要对网络进行一些研究,并深入了解 Windows 端口和类似的东西,所以建议任何参考【参考方案2】:
原因可能是以下任何一种:
-
拥有 IIS 版本
Windows 功能下未启用 Web Socket 协议
拥有 .NET Framework 版本
web.config 的
system.webServer
部分中未包含以下行:
<handlers>
<add path="/ws.ashx" verb="*" name="ws" type="namespace.ws"/>
</handlers>
【讨论】:
以上是关于websocket连接失败?的主要内容,如果未能解决你的问题,请参考以下文章
WebSocket 连接失败。 WebSocket握手期间出错-socketjs
WebSocket 连接到 'ws:url' 失败:WebSocket 在连接建立之前关闭
Websocket 连接尝试失败,返回“连接:升级,关闭”。
rxjs/webSocket - 到“ws://localhost:3000/”的 WebSocket 连接失败:连接在收到握手响应之前关闭