【问题标题】:connect to C# server from javascript从 javascript 连接到 C# 服务器
【发布时间】:2016-02-02 04:58:51
【问题描述】:

是否可以创建一个使用简单套接字而不是 WebSocket 连接到简单 C# 服务器的 javascript 程序。

你能帮我做个样品吗?

【问题讨论】:

  • JavaScript 运行在哪里?在浏览器中?在控制台中?在服务器上?
  • 在浏览器中运行的 JavaScript
  • 不,你不能在浏览器中使用套接字连接,直接从浏览器访问套接字永远不会发生,因为它会带来巨大的风险。

标签: javascript sockets websocket


【解决方案1】:

似乎至少 Firefox 应该知道套接字,请参阅https://developer.mozilla.org/en-US/docs/Web/API/TCP_Socket_API。但是(取自同一来源)TCP 或 UDP 套接字不是任何标准的一部分,因此在其他浏览器中可能不受支持或完全不同。

【讨论】:

    【解决方案2】:

    原则上没有。出于安全原因,浏览器只允许一组有限的协议。 Chrome 有一个套接字 API,但这不是标准的 - https://developer.chrome.com/apps/sockets_tcp。有些解决方案使用 WebSocket 连接到服务器,然后建立 TCP 套接字连接,例如https://github.com/kanaka/websockify,http://artemyankov.com/tcp-client-for-browsers/,所以如果你不能直接将 WebSocket 添加到服务器,你可能需要检查这些。

    【讨论】:

      【解决方案3】:

      没有标准的方法可以通过在 Web 浏览器中运行的 Javascript 代码建立 TCP 连接。 (参见@Johannes Hahn 的回答)

      要在您的客户端和服务器之间进行通信,请考虑 Microsoft 的 SignalR 库。它旨在允许在浏览器中运行的 Javascript 程序与 C# 服务器进行通信。 SignalR 将使用 websocket;但是,如果通过回退到其他传输方式无法使用 websocket,它将继续工作。如果您需要阻止它尝试使用 websockets,您还可以指定传输。

      SignalR 连接以 HTTP 开始,如果可用,则升级为 WebSocket 连接。 WebSocket 是 SignalR 的理想传输方式,因为它最有效地利用服务器内存,具有最低的延迟,并具有最底层的功能(例如客户端和服务器之间的全双工通信),但它也有最严格的要求:WebSocket 要求服务器使用 Windows Server 2012 或 Windows 8 和 .NET Framework 4.5。如果不满足这些要求,SignalR 将尝试使用其他传输方式进行连接。


      另外,请注意,如果您的 Javascript没有在网络浏览器中运行,您可以进行常规网络连接。例如,在 Node.js 上运行的 Javascript 应用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-21
        • 2018-04-21
        • 1970-01-01
        • 2017-08-23
        相关资源
        最近更新 更多