【问题标题】:handshaking a SQL server with Javascript使用 Javascript 与 SQL 服务器握手
【发布时间】:2011-09-06 17:48:25
【问题描述】:

作为学习练习,我想尝试让我的 javascript 与 sql 聊天。

var ws = new WebSocket("ws://127.0.0.1:1433");

似乎不是一个被阻塞的端口,所以理论上它应该可以工作。

我正在寻找有关如何与 sql server 握手并与之聊天的详细信息。

非常感谢您提供正确方向的指针
(甚至是解释为什么它不起作用的原因。)

我想在 Microsoft SQL 2008 R2 上试试这个。

【问题讨论】:

  • WebSockets 和 MySQL 的通信协议不同,因此上述方法不起作用。 MySQL Protocol != WebSocket Protocol
  • 你说的是哪个 SQL 服务器?我不知道有任何支持 WebSockets 的数据库服务器。记住,WebSocket != Socket.
  • @Hylangelo:这是我正在寻找的东西,据我了解,websocket 与普通套接字是一样的(例如,我想如果我发送正确的十六进制来握手等,它应该可以工作)
  • 从未玩过它(并且它已被弃用)您是否在 SQL Server 中寻找 xml webservices? SQL Server Authentication over SOAP
  • 与 Javascript 相关的许多事情一样:仅仅因为你可以,并不意味着你应该。

标签: javascript sql sql-server websocket


【解决方案1】:

MS SQL 没有基于文本的协议来允许您通过 telnet 与其交互。您可以使用 Web 套接字来确定目标服务器正在侦听 1433,但完成登录序列的最佳选择是使用 sql 客户端 api。

【讨论】:

  • 更不用说将您的 SQL 服务器直接暴露给浏览器客户端这一事实,委婉地说,是一个职业生涯终结的举动。
【解决方案2】:

SQL Server 连接使用 TDS 协议,该协议记录在 Tabular Data Stream Protocol Specification 中。如果您遵循协议规范,请查阅protocol examples 并查看FreeTDS 开源实现,您应该能够使用基本套接字进行低级握手等等。但是,除了学术练习之外,这样做真的没有任何意义。但是棺材里的钉子是WebSockets,它们不是基本的套接字。

可行的方法是使用 Web 服务接口(最好是 REST,可能是 OData)将 SQL Server 数据库公开到 Web,然后从您的 Javascript HTML5 应用程序中使用此 Web 服务。这是一个很好的阅读:Creating an OData API for StackOverflow including XML and JSON in 30 minutes

【讨论】:

    【解决方案3】:

    在 HTML5 中,JavaScript 可以使用 SQLite 直接与 SQL 通信。虽然我不确定您对“聊天”的定义是什么,但请谨慎回答。
    http://html5doctor.com/introducing-web-sql-databases/

    【讨论】:

      【解决方案4】:

      尽管 WebSockets 名称中有“Socket”,尽管事实上 WS 运行在 TCP 之上(使用基于 HTTP 的初始握手),但 WS 不是 TCP。 我不知道 MS SQL Server 使用的前端协议,但它不太可能与 WS 框架兼容。

      你能做的大概如下:

      浏览器 WS 代理 SQL Server

      对于代理,你可能想看看

      https://github.com/kanaka/websockify

      这个宝贝可以让你通过 WS 与代理进行通信,代理会解开 WS 有效负载,并将其变成纯 TCP 流。

      这样应该可以与 SQL Server 对话......这可能需要大量工作,而且我不知道 SQL Server 协议文档有多好/开放。

      对于 PostgreSQL,前端协议是完全开放且有据可查的。

      如果不清楚我上面的意思是什么,我可以详细说明.. 或 ping kanaka 询问他的想法.. kanaka = 代理的作者,无论如何在 WS 上非常活跃。

      【讨论】:

      • 这实际上是我整个星期感兴趣的最接近的人。
      • 还有一个额外的考虑(如果你真的想试一试):在浏览器和代理之间,它是 WS。使用 WS,您有 2 种有效负载:文本 (utf-8) 或二进制。直到最近 Chrome 才增加了对二进制的支持。 kanaka 代理能够将 base64 编码的文本消息解包成二进制 TCP。这适用于 Chrome 和 FF。当然,更有效的方法是跳过这种包装并使用二进制 WS 消息。您需要 Chrome 15 来做到这一点(今天)。而且我不知道代理是否可以选择关闭 base64 展开(但我猜是这样)。
      【解决方案5】:

      典型的 SQL 服务器没有直接的 HTTP 接口,即不允许浏览器直接连接。
      然而,使用 PHP 或任何服务器端语言制作这样的不安全界面并不难:

      <?php
      $query = mysql_query($_REQUEST['q']);
      $dbResult = exeute($query); 
      // execute is an imaginary function, you can use any function/library you want
      echo json_encode($dbResults);
      

      试试 MangoDB,它有一个 HTTP 接口: Simple REST Api

      您可以通过添加服务器/用户/数据库/密码参数使其更加动态,但如果页面是公开的,它将更加不安全。

      【讨论】:

        【解决方案6】:

        如果您使用微软提供的 ADO 对象,您应该能够与 sql 数据库进行通信。 http://msdn.microsoft.com/en-us/library/ms681519(v=vs.85).aspx

        我知道您可以与 sql 数据库“聊天”。乡巴佬,我不确定你可以在普通的网络浏览器中做到这一点。在工作中,我们使用hta 和内部 MySQL 服务器来实现。

        【讨论】:

          【解决方案7】:

          哇!不要感觉不好,哥们,你完全错了。 JavaScript 是一种语言,它具有出色的非阻塞 i/o 功能。这段代码扼杀了它的全部精神。

          任何数据库代码在 js 中最终都应该是这样的。

          getRemoteData('remoteURL', callback(data){
          
              // Use your data here
          });
          

          语言中有很多好的部分。学习使用它。

          如果你想进行实时聊天,couchDB 和 JavaScript 一起使用将是一个不错的选择。 Node.js 也很出色。 SQL 不是用于实时应用程序的东西

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-08-17
            • 2013-01-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-26
            • 2016-03-02
            相关资源
            最近更新 更多