2012-02-28 17 views
1

我有问题,当我想在我的应用程序上尝试网络套接字技术。 但我想问一下关于web socket的requiretment。是否可以在Web套接字上使用不同的语言?

1)更多钞票是我使用的服务器用JavaScript语言EX是socket.io

var io = require('socket.io').listen(3001); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', {hello: 'can you hear me'}); 
}); 

,并使用Java语言例如客户端socket.io.java 我使用这个方法从服务器获取消息

public void onMessage(JSONObject json, IOAcknowledge ack) { 
       Log.d("We received a message: " , json.toString()); 
      } 

与我的socket服务器是

SocketIO socket = new SocketIO("http://127.0.0.1:3001/news"); 

2)是否支持所有机器?或浏览器吗?我是在web套接字编程新手,请帮我

感谢您的答案...

回答

3

是的,你可以用你想要的任何语言来构建服务器,但是网络套接字不是一个简单的套接字,它们是“遵循”特定协议的套接字,因此请确保你阅读了这个协议的规范并实现它在你的服务器上,这样任何浏览器都能够建立一个连接。

你也可以用任何语言编写客户端,但是如果你没有使用javascript,那么我不明白你为什么要使用web套接字而不是使用简单的套接字。但是,如果你想,只要看看浏览器发送到Web套接字服务器的数据,并从你自己的客户端模拟它。

+0

我正在使用javascript测试客户端,我可以发送每次请求并从服务器获取响应...当我在客户端使用另一种语言时,我有堆栈,我认为我的代码错过了。 – viyancs 2012-02-28 07:43:05

+0

可能因为您没有从您的客户端发送握手数据,这是web套接字协议所要求的。当你使用Javascript时,浏览器会为你做好准备,但如果你正在编写你自己的客户端,你必须自己做。 – Delta 2012-02-28 07:47:49

+0

感谢您的回答,我解决了我的问题,我发送握手到服务器,但我不处理,所以我无法从客户端获得消息,只是给予处理,我可以完美地运行我的程序...: ) – viyancs 2012-02-29 04:42:18

1

为了详细阐述台达的答案,“websockets”是HTTP协议的一种变体,客户端发送HTTP请求消息,服务器发送HTTP响应,然后客户端和服务器使用仍然打开的TCP/IP连接做“其他事情”。请求和响应包含特殊的头文件,允许客户端和服务器同意以这种方式使用连接。

为了达到此目的,客户端和服务器都需要了解HTTP协议的至少一个子集才能执行初始“握手”。因此,不能只需使用websocket客户端与普通套接字服务器进行通信;反之亦然。 (如果你试图做到这一点,两端都会看到意外的东西/协议错误,并且websocket会立即关闭其TCP/IP连接的结尾。)

话虽如此,websocket客户端和websocket服务器可以用任何现代编程语言来实现。 (对于普通的套接字客户端和服务器也是如此)。

+0

WebSockets不是HTTP的变体。它具有HTTP友好的初始握手,但之后更像是原始套接字(全双工,双向,持久)。 HTTP友好的握手使得在同一端口(80,443)上运行WebSocket服务器和Web服务器变得容易,这使得它可以与现有的防火墙配置一起工作。 – kanaka 2012-02-28 14:07:23

相关问题