我有一种系统可以不断地从Java后端向Web前端发送消息.我使用Openfire和XMPP协议作为传输系统.但是XMPP只是一种传输协议,它不保证在互联网连接断开的情况下交付.所以首先我决定改用更轻的传输协议 - WebSocket.而WebSocket又是一种传输协议.是否有基于WebSockets的生产就绪和免费消息传递框架,支持消息保证传递.您只需使用clientId发送消息,该框架将完成剩下的工作.如果用户处于脱机状态或Internet连接已关闭.我的意思是该框架将关心交付.
我目前正在开发Java WebSocket客户端应用程序,我必须确保客户端收到来自服务器的每条消息.由于连接中断,我是否可能丢失一些消息(一旦从服务器发送消息)?WebSocket基于TCP,所以这不应该发生吗?
我现在正在使用javax.websocket.*API,但我不知道如何Endpoint在Internet上搜索后使用一些构造函数参数初始化.
ServerContainer container = WebSocketServerContainerInitializer.configureContext(context); //jetty
container.addEndpoint(MyWebSocketEndpoint.class);
Run Code Online (Sandbox Code Playgroud)
我想在初始化时传递一些参数MyWebSocketEndpoint然后我可以使用参数,比方说clientQueue,在我的onOpen方法中做类似的事情:
clientQueue.add(new Client(session));
Run Code Online (Sandbox Code Playgroud) 我正在建立websocket连接性,其中使用javax.websocket构建服务器,并且客户端位于html5中。
这些代码工作正常。但是一段时间后,会议结束了。我想保持这次会议的活力。
我有两个问题:
以下是代码:
var wsUri="ws://localhost/";
var websocket = new WebSocket(wsUri);
var datasocket;
var username;
websocket.onopen = function(evt) { onOpen(evt) };
websocket.onmessage = function(evt) { onMessage(evt) };
websocket.onerror = function(evt) { onError(evt) };
function join() {
username = textField.value;
websocket.send(username + " joined");
console.log("joined");
}
function send_message() {
websocket.send(username + ": " + textField.value);
}
function onOpen() {
console.log("connected to url");
websocket.send("Hello");
// writeToScreen("Connected to " + wsUri);
}
function onMessage(evt) {
var res = {};
console.log("onMessage: " …Run Code Online (Sandbox Code Playgroud) 我一直致力于用 Java 编写 Web Socket 服务器,这一点让我困惑了一段时间。在 GitHub 上,有 TooTallNate 开发的这个库,它是“100% Java 中的准系统 WebSocket 客户端和服务器实现”: https: //github.com/TooTallNate/Java-WebSocket
它拥有大量明星,并且正在积极开发中。
但似乎 Java 的主库中已经有了 websocket 功能?https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_a_WebSocket_server_in_Java
还有 Jetty 的 WebSocket 之类的东西:http://www.eclipse.org/jetty/documentation/9.4.x/jetty-websocket-server-api.html
还有 Netty,它似乎也有 WebSocket 的东西。
那么它们之间到底有什么区别呢?这是简单性的问题吗?还是性能?或者它们是完全不同的东西?如果我需要低延迟高频发送 5-10 kb 消息,是否有一种最合适的选项?
我需要写聊天。但是我有一个问题,我无法触发MessageMapping controller。应用包含两部分,前端在4200端口上运行,后端在8080端口上运行。我已经设置了所有配置,但@MessageMapping controller没有被触发。后端控制台什么也没说。但是浏览器控制台说,该消息已发送。您能帮我解决问题吗?这是hava配置。
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat").setAllowedOrigins("*").withSockJS();
}
Run Code Online (Sandbox Code Playgroud)
这是控制器
@Controller
public class MessageController {
@MessageMapping("/chat")
@SendTo("/topic/message")
public void sendMessage(Message message) {
System.out.println("test");
}
Run Code Online (Sandbox Code Playgroud)
和写在angular的前端部分:
(function (angular, SockJS, Stomp, _, undefined) {
"use strict";
angular.module("app").
factory("chatService", chatService);
chatService.$inject = ["$q", "$timeout"];
function chatService ($q, $timeout) {
var service = {}, listener = $q.defer(), socket = {
client: null,
stomp: null
}, …Run Code Online (Sandbox Code Playgroud) 我正在为 Android 实现nv-websocket-client。我在 Log 中遇到这样的错误。如何连接成功?
com.neovisionaries.ws.client.WebSocketException: The status line of the opening handshake response is empty.
09-18 15:37:59.532 14225-14248/info.androidhive.firebasenotifications W/System.err: at com.neovisionaries.ws.client.HandshakeReader.readStatusLine(HandshakeReader.java:99)
09-18 15:37:59.532 14225-14248/info.androidhive.firebasenotifications W/System.err: at com.neovisionaries.ws.client.HandshakeReader.readHandshake(HandshakeReader.java:48)
09-18 15:37:59.532 14225-14248/info.androidhive.firebasenotifications W/System.err: at com.neovisionaries.ws.client.WebSocket.readHandshake(WebSocket.java:3244)
09-18 15:37:59.532 14225-14248/info.androidhive.firebasenotifications W/System.err: at com.neovisionaries.ws.client.WebSocket.shakeHands(WebSocket.java:3123)
09-18 15:37:59.532 14225-14248/info.androidhive.firebasenotifications W/System.err: at com.neovisionaries.ws.client.WebSocket.connect(WebSocket.java:2155)
Run Code Online (Sandbox Code Playgroud)
我的服务器端代码位于 Socket.js 中。我有什么遗漏的吗?
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
io.on('connection', function(socket){
console.log('client connected');
let jsonObject = {
name: 'shihab',
age : 28
};
io.emit('test-event', jsonObject);
console.log(jsonObject); …Run Code Online (Sandbox Code Playgroud) 有一个很棒的答案,详细介绍了 REST api 的工作原理。
Websocket 如何以类似的细节工作?
websocket socket.io spring-websocket libwebsockets java-websocket
我正在尝试使用 Spring StandardWebSocketClient 建立 WebSocket 连接,但由于代理设置而出现错误,因为服务器在代理后面运行。下面是我正在使用的代码。
StandardWebSocketClient aStandardWebSocketClient=new StandardWebSocketClient();
WebSocketConnectionManager manager = new WebSocketConnectionManager(aStandardWebSocketClient, new WebSockethandler(), aWebSockURL);
Run Code Online (Sandbox Code Playgroud)
成功设置代理配置后可以进行休息呼叫。
是否有任何代理配置可用于使 StandardWebSocketClient 连接到 websocket 服务器?
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
InetSocketAddress address = new InetSocketAddress("proxyHost",8080);
Proxy proxy = new Proxy(Proxy.Type.HTTP,address);
factory.setProxy(proxy);
restTemplate.setRequestFactory(factory);
Run Code Online (Sandbox Code Playgroud) 我需要设置一个websocket服务器,它可以接收客户端发送的音频数据.我正在使用码头.
处理程序代码:
{
@OnWebSocketClose
public void onClose(int statusCode, String reason) {
}
@OnWebSocketError
public void onError(Throwable t) {
}
@OnWebSocketConnect
public void onConnect(Session session) {
}
@OnWebSocketMessage
public void onMessage(String message) {
}
@OnWebSocketMessage
public void onMessage(bytes [] b) {
}
@OnWebSocketMessage
public void inputStream(InputStream is) {
}
}
Run Code Online (Sandbox Code Playgroud)
由于音频文件非常大,客户端正在以块的形式发送它们.现在,对于每个块,onMessage(bytes [] b) {}都会调用方法.
在服务器端,我需要添加这些块并处理音频.我怎样才能做到这一点.
还有什么区别onMessage(bytes [] b) {}和onMessage(InputStream is) {}方法.
谢谢,
Shantanu
java-websocket ×10
websocket ×9
java ×5
socket.io ×2
android ×1
html5 ×1
jetty ×1
node.js ×1
qos ×1
server ×1
serversocket ×1
spring-boot ×1
stomp ×1
tcp ×1