java websocket开发_java websocket的开发案例与注意事项

第一步:源码

/*  * Licensed to the Apache Software Foundation (ASF) under one or more

* contributor license agreements.  See the NOTICE file distributed with

* this work for additional information regarding copyright ownership.

* The ASF licenses this file to You under the Apache License, Version 2.0

* (the "License"); you may not use this file except in compliance with

* the License.  You may obtain a copy of the License at

*

*      http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package com.websocket.chat;

import java.io.IOException;

import java.nio.ByteBuffer;

import java.nio.CharBuffer;

import java.util.Set;

import java.util.concurrent.CopyOnWriteArraySet;

import java.util.concurrent.atomic.AtomicInteger;

import javax.servlet.http.HttpServletRequest;

import org.apache.catalina.websocket.MessageInbound;

import org.apache.catalina.websocket.StreamInbound;

import org.apache.catalina.websocket.WebSocketServlet;

import org.apache.catalina.websocket.WsOutbound;

/**

* Example web socket servlet for chat.

*/

public class ChatWebSocketServlet extends WebSocketServlet {

private static final long serialVersionUID = 1L;

private static final String GUEST_PREFIX = "Guest";

private final AtomicInteger connectionIds = new AtomicInteger(0);

private final Set connections =

new CopyOnWriteArraySet();

@Override

protected StreamInbound createWebSocketInbound(String subProtocol,

HttpServletRequest request) {

return new ChatMessageInbound(connectionIds.incrementAndGet());

}

private final class ChatMessageInbound extends MessageInbound {

private final String nickname;

private ChatMessageInbound(int id) {

this.nickname = GUEST_PREFIX + id;

}

@Override

protected void onOpen(WsOutbound outbound) {

connections.add(this);

String message = String.format("* %s %s",

nickname, "has joined.");

broadcast(message);

}

@Override

protected void onClose(int status) {

connections.remove(this);

String message = String.format("* %s %s",

nickname, "has disconnected.");

broadcast(message);

}

@Override

protected void onBinaryMessage(ByteBuffer message) throws IOException {

throw new UnsupportedOperationException(

"Binary message not supported.");

}

@Override

protected void onTextMessage(CharBuffer message) throws IOException {

// Never trust the client

String filteredMessage = String.format("%s: %s",

nickname, "");

broadcast(filteredMessage);

}

private void broadcast(String message) {

for (ChatMessageInbound connection : connections) {

try {

CharBuffer buffer = CharBuffer.wrap(message);

connection.getWsOutbound().writeTextMessage(buffer);

} catch (IOException ignore) {

// Ignore

}

}

}

}

}

第二步 websocket部署

wsChat

com.websocket.chat.ChatWebSocketServlet

wsChat

/websocket/chat

第三步 html5

Apache Tomcat WebSocket Examples: Chat

input#chat {

width: 410px

}

#console-container {

width: 400px;

}

#console {

border: 1px solid #CCCCCC;

border-right-color: #999999;

border-bottom-color: #999999;

height: 170px;

overflow-y: scroll;

padding: 5px;

width: 100%;

}

#console p {

padding: 0;

margin: 0;

}

var Chat = {};

Chat.socket = null;

Chat.connect = (function(host) {

if ('WebSocket' in window) {

Chat.socket = new WebSocket(host);

} else if ('MozWebSocket' in window) {

Chat.socket = new MozWebSocket(host);

} else {

Console.log('Error: WebSocket is not supported by this browser.');

return;

}

Chat.socket.onopen = function () {

Console.log('Info: WebSocket connection opened.');

document.getElementById('chat').onkeydown = function(event) {

if (event.keyCode == 13) {

Chat.sendMessage();

}

};

};

Chat.socket.onclose = function () {

document.getElementById('chat').onkeydown = null;

Console.log('Info: WebSocket closed.');

};

Chat.socket.onmessage = function (message) {

Console.log(message.data);

};

});

Chat.initialize = function() {

if (window.location.protocol == 'http:') {

Chat.connect('ws://' + window.location.host +'/btc/websocket/chat');

} else {

Chat.connect('wss://' + window.location.host + '/btc/websocket/chat');

}

};

Chat.sendMessage = (function() {

var message = document.getElementById('chat').value;

if (message != '') {

Chat.socket.send(message);

document.getElementById('chat').value = '';

}

});

var Console = {};

Console.log = (function(message) {

var console = document.getElementById('console');

var p = document.createElement('p');

p.style.wordWrap = 'break-word';

p.innerHTML = message;

console.appendChild(p);

while (console.childNodes.length > 25) {

console.removeChild(console.firstChild);

}

console.scrollTop = console.scrollHeight;

});

Chat.initialize();

Seems your browser doesn't support Javascript! Websockets rely on Javascript being enabled. Please enable

Javascript and reload this page!

第四步 需要引入相关jar : tomcat-coyote.jar,catalina.jar .

最后编译,然后运行。访问chat.html。注意红色的标记。

如有不懂,请加入QQ群 :211202664

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值