java websocket 1.0_Java EE 7中对WebSocket 1.0的支持

Java EE 7中对WebSocket 1.0的支持

1.server端

pom依赖:

javax

javaee-api

7.0-b82

provided

src/main/java/com/hmkcode/MyServerEndpoint.java

package com.hmkcode;

import java.io.IOException;

import java.util.LinkedList;

import javax.websocket.EncodeException;

import javax.websocket.OnClose;

import javax.websocket.OnMessage;

import javax.websocket.OnOpen;

import javax.websocket.Session;

import javax.websocket.server.PathParam;

import javax.websocket.server.ServerEndpoint;

@ServerEndpoint(value="/websocket/{client-id}")

public class MyServerEndpoint {

private static final LinkedList clients = new LinkedList();

@OnOpen

public void onOpen(Session session) {

clients.add(session);

}

@OnMessage

public void onMessage(String message,@PathParam("client-id") String clientId) {

for (Session client : clients) {

try {

client.getBasicRemote().sendObject(clientId+": "+message);

} catch (IOException e) {

e.printStackTrace();

} catch (EncodeException e) {

e.printStackTrace();

}

}

}

@OnClose

public void onClose(Session peer) {

clients.remove(peer);

}

}

@ServerEndpoint(value=”/websocket/{client-id}”)是client连接的url地址,{client-id}是每个client连接的名称标识。

@onOpen,@onMessag和@onClose是对应的每个session连接生命周期的回调函数

2. websocket客户端(桌面端)

pom依赖:

javax

javaee-api

7.0-b82

org.glassfish.tyrus

tyrus-client

1.0-rc3

org.glassfish.tyrus

tyrus-container-grizzly

1.0-rc3

src/main/java/com/hmkcode/MyClient.java

package com.hmkcode;

import java.io.IOException;

import javax.websocket.ClientEndpoint;

import javax.websocket.OnError;

import javax.websocket.OnMessage;

import javax.websocket.OnOpen;

import javax.websocket.Session;

@ClientEndpoint

public class MyClient {

@OnOpen

public void onOpen(Session session) {

System.out.println("Connected to endpoint: " + session.getBasicRemote());

try {

session.getBasicRemote().sendText("Hello");

} catch (IOException ex) {

}

}

@OnMessage

public void onMessage(String message) {

System.out.println(message);

}

@OnError

public void onError(Throwable t) {

t.printStackTrace();

}

}

src/main/java/com/hmkcode/App.java

package com.hmkcode;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.URI;

import javax.websocket.ContainerProvider;

import javax.websocket.DeploymentException;

import javax.websocket.Session;

import javax.websocket.WebSocketContainer;

public class App {

public Session session;

protected void start()

{

WebSocketContainer container = ContainerProvider.getWebSocketContainer();

String uri = "ws://localhost:8080/websocket-glassfish-server/websocket/desktop-client";

System.out.println("Connecting to " + uri);

try {

session = container.connectToServer(MyClient.class, URI.create(uri));

} catch (DeploymentException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String args[]){

App client = new App();

client.start();

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String input = "";

try {

do{

input = br.readLine();

if(!input.equals("exit"))

client.session.getBasicRemote().sendText(input);

}while(!input.equals("exit"));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

3. client web客户端

/src/main/webapp/index.htm

Java API for WebSocket (JSR-356)

Java API for WebSocket (JSR-356)

Not Connected

Message:

Send

#SenderMessage

/src/main/webapp/websocket.js

var URL = "ws://localhost:8080/websocket-glassfish-server/websocket/web-client";

var websocket;

$(document).ready(function(){

connect();

});

function connect(){

websocket = new WebSocket(URL);

websocket.onopen = function(evnt) { onOpen(evnt) };

websocket.onmessage = function(evnt) { onMessage(evnt) };

websocket.onerror = function(evnt) { onError(evnt) };

}

function sendMessage() {

websocket.send($("#message").val());

}

function onOpen() {

updateStatus("connected")

}

function onMessage(evnt) {

if (typeof evnt.data == "string") {

$("#received_messages").append(

$('

')

.append($('

').text("1"))

.append($('

').text(evnt.data.substring(0,evnt.data.indexOf(":"))))

.append($('

').text(evnt.data.substring(evnt.data.indexOf(":")+1))));

}

}

function onError(evnt) {

alert('ERROR: ' + evnt.data);

}

function updateStatus(status){

if(status == "connected"){

$("#status").removeClass (function (index, css) {

return (css.match (/\blabel-\S+/g) || []).join(' ')

});

$("#status").text(status).addClass("label-success");

}

}

不过web端需要在支持websokcet的应用服务器上跑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值