java webscoket_WebSocket的java实现

WebSocket API简介:

首先看一段简单的javascript代码,该代码调用了WebSockets的API。

varws =newWebSocket(“ws://echo.websocket.org”);

ws.onopen = function(){ws.send(“Test!”); };

ws.onmessage = function(evt){console.log(evt.data);ws.close();};

ws.onclose = function(evt){console.log(“WebSocketClosed!”);};

ws.onerror = function(evt){console.log(“WebSocketError!”);};

这份代码总共只有5行,现在简单概述一下这5行代码的意义。

第一行代码是在申请一个WebSocket对象,参数是需要连接的服务器端的地址,同http协议使用http://开头一样,WebSocket协议的URL使用ws://开头,另外安全的WebSocket协议使用wss://开头。

第二行到第五行为WebSocket对象注册消息的处理函数,WebSocket对象一共支持四个消息 onopen, onmessage, onclose和onerror,当Browser和WebSocketServer连接成功后,会触发onopen消息;如果连接失败,发送、接收数据失败或者处理数据出现错误,browser会触发onerror消息;当Browser接收到WebSocketServer发送过来的数据时,就会触发onmessage消息,参数evt中包含server传输过来的数据;当Browser接收到WebSocketServer端发送的关闭连接请求时,就会触发onclose消息。我们可以看出所有的操作都是采用消息的方式触发的,这样就不会阻塞UI,使得UI有更快的响应时间,得到更好的用户体验。

实现:

@ServerEndpoint(value = "/websocket/{random}")

public class WebSocket {

private static final Set connections =

new CopyOnWriteArraySet();

private Session session;

private String random;

public WebSocket() {

}

/*当websocket的客户端连接到服务器时候,这个方法就会执行,并且传递一个session会话对象来

我们拿到这话session,就是可以给客户端发送消息*/

@OnOpen

public void start(Session session,@PathParam("random") String random) {

this.random=random;

System.out.println(random);

this.session = session;

connections.add(this);

}

/*客户端被关闭时候,就会自动会调用这个方法*/

@OnClose

public void end() {

connections.remove(this);

}

/*客户端给服务器发送消息,这个方法会自动调用,并且可以拿到发送过来的数据*/

@OnMessage

public void incoming(String message) {

// Never trust the client

//sendByIp("10.104.5.51","only to the first");

System.out.println(random+":"+message);

broadcast(message);

}

/*发生了异常自动执行*/

@OnError

public void onError(Throwable t) throws Throwable {

}

/*广播:遍历客户端集,发送消息,注意发送要用的session,用session.getBasicRemote().sendText(msg)发送消息*/

public static void broadcast(String msg) {

for (WebSocket client : connections) {//遍历所有

try {//如果这个client已经在线

synchronized (client) {

client.session.getBasicRemote().sendText(msg);//发送消息

}

} catch (IOException e) {//如果这个client不在线

connections.remove(client);

try {

client.session.close();

} catch (IOException e1) {

// Ignore

}

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Java实现 WebSocket,可以使用 Java WebSocket API。以下是一个简单的示例: ```java import javax.websocket.*; import java.net.URI; @ClientEndpoint public class MyWebSocketClient { @OnOpen public void onOpen(Session session) { System.out.println("Connected to endpoint: " + session.getBasicRemote()); } @OnMessage public void onMessage(String message) { System.out.println("Received message: " + message); } public static void main(String[] args) { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); String uri = "ws://localhost:8080/myendpoint"; try { Session session = container.connectToServer(MyWebSocketClient.class, URI.create(uri)); session.getBasicRemote().sendText("Hello, World!"); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们定义了一个 `MyWebSocketClient` 类,并使用 `@ClientEndpoint` 注解将其标记为 WebSocket 客户端端点。我们还定义了两个注解方法,`onOpen()` 和 `onMessage()`,分别在连接建立和接收到消息时被调用。在 `main()` 方法中,我们使用 `WebSocketContainer` 来连接到 WebSocket 终端点,并向其发送一条消息。 在使用上述代码之前,需要确保已经引入 Java WebSocket API 的依赖项。可以使用以下 Maven 依赖项: ```xml <dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> <version>1.1</version> </dependency> ``` 注意,以上代码仅适用于通过端口直接连接的 WebSocket。如果需要使用 SSL/TLS 连接,或者需要进行身份验证等操作,需要进行额外的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值