一个任务:
服务器和客户端必须实时交换信息。例如以 JSON 消息的形式。
问题:
服务端:这个任务有哪些现成的解决方案,是否通过这种方式解决,还不是很清楚。目前有一个Echo服务器在Netty。有点低级了 有必要通过换行符将字节数组彼此分开,或者发明某种您自己的分隔符并以字节为单位来捕获它,这似乎很荒谬。
在客户端:作为客户端,我们以一个android应用为例。我尝试了https://github.com/socketio/socket.io-client-java但无法正常工作。我试过OkHttp了,但它首先将请求参数发送到该地址的服务器(一些标头等),然后在服务器响应中接收这些标头时出错:java.net.ProtocolException: Unexpected status line {ТУТ ЗАГОЛОВОК ЗАПРОСА К СЕРВЕРУ}
问题:
这一切在风水里是怎么做到的?什么可以进入谷歌?
必须有一些标准和库......这就是寻找它们的方法(
UPD_0:
HTTP/1.1 101 Web Socket Protocol Handshake在来自服务器的消息的开头添加后,它停止下降。现在它只是沉默。服务器和客户端都不会收到消息。似乎客户端实现期望服务器为其请求提供一些行序列,在某些标准中进行了描述。因此,问题是——是否真的有必要阅读一些标准,或者是否有现成的服务器解决方案可以让您专注于实际通信,而不是严格遵守某些协议?
问题在于需要在服务器和客户端之间实现数据交换协议。那些。服务器必须确认连接成功,读取标头,以特殊消息响应,并进行标准中描述的其他行礼。最初在服务器上使用的Netty是完全底层的,协议必须在那里独立实现。使用的客户端库需要服务器上已经实现的协议。显然,您也可以在客户端使用原始套接字实现并用手解析字节。但这当然不是解决方案。
结果,我为服务器找到了这个解决方案:Java-WebSocket。
对于客户端,我使用了 lib nv-websocket-client
结果,事实证明不是选择字节,而是
JSON与 -ami 争吵,这是必需的。@YuriySPb 这里是客户端本身https://github.com/TooTallNate/Java-WebSocket/blob/master/src/main/java/org/java_websocket/client/WebSocketClient.java 这里是用法https://github。 com/TooTallNate /Java-WebSocket/tree/master/src/main/example 对于android,最好将客户端安排为服务