怎样用java web和websocket实现网页即时通讯

 我来答
DoramiHe
2017-02-18 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25332 获赞数:59541
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
使用7z格式压缩上传
下载1: http://vdisk.weibo.com/s/D7LHb/1369631064
下载2: att.newsmth.net/att.php?p.75.25665.766.7z

Java版源代码下载:http://vdisk.weibo.com/s/I26Jq
(有些网友对C++如何实现感兴趣,推荐一下Poco带的WebSocket功能,把Java源代码翻译成C++就行了)

1. 说明:

utf8版本,支持各种语言版本的windows系统
程序内嵌数据库
用户帐号非明文存储
在Firefox/Chrome浏览器测试通过,建议使用Chrome,Firefox不支持mp3的消息提示音
2. 现有功能

注册/登录/搜索/添加好友(需要双方互相添加对方为好友,才能互相聊天)
抖动窗口

两种状态,登录/离线
3.可扩展的功能

使用Windows域用户帐号,无需注册
收发离线信息
查看历史信息
新消息提示
群聊
共享文件

4. (可能)存在的问题

并发性未作充分测试
添加好友的确认

5. 适用的场景

学校
小公司

6.使用
解压后双击执行start.bat,将自动进入初始界面,如下图
默认使用80端口,若80端口已被占用,修改start.bat中的setserver_port=80

双击左上角图标,弹出对话框,可以选择注册

注册成功

登录

搜索好友,如不提供搜索条件,则返回所有已注册用户

添加好友

添加好友提示

聊天
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友10c25bb4
2016-09-14 · TA获得超过419个赞
知道小有建树答主
回答量:441
采纳率:25%
帮助的人:316万
展开全部
JavaScript code
<script type="text/javascript">

// Create a socket
var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket;
var socket = new WS('@@{WebSocket.ChatRoomSocket.join(user)}')

// Display a message
var display = function(event) {
$('#thread').append(tmpl('message_tmpl', {event: event}));
$('#thread').scrollTo('max')
}

// Message received on the socket
socket.onmessage = function(event) {
var parts = /^([^:]+):([^:]+)(:(.*))?$/.exec(event.data)
display({
type: parts[1],
user: parts[2],
text: parts[4]
})
}

$('#send').click(function(e) {
var message = $('#message').val()
$('#message').val('')
socket.send(message)
});

$('#message').keypress(function(e) {
if(e.charCode == 13 || e.keyCode == 13) {
$('#send').click()
e.preventDefault()
}
})

</script>

服务器端:
Java code

package controllers;

import play.*;
import play.mvc.*;
import play.libs.*;
import play.libs.F.*;
import play.mvc.Http.*;

import static play.libs.F.*;
import static play.libs.F.Matcher.*;
import static play.mvc.Http.WebSocketEvent.*;

import java.util.*;

import models.*;

public class WebSocket extends Controller {

public static void room(String user) {
render(user);
}

public static class ChatRoomSocket extends WebSocketController {

public static void join(String user) {

ChatRoom room = ChatRoom.get();

// Socket connected, join the chat room
EventStream<ChatRoom.Event> roomMessagesStream = room.join(user);

// Loop while the socket is open
while(inbound.isOpen()) {

// Wait for an event (either something coming on the inbound socket channel, or ChatRoom messages)
Either<WebSocketEvent,ChatRoom.Event> e = await(Promise.waitEither(
inbound.nextEvent(),
roomMessagesStream.nextEvent()
));

// Case: User typed 'quit'
for(String userMessage: TextFrame.and(Equals("quit")).match(e._1)) {
room.leave(user);
outbound.send("quit:ok");
disconnect();
}

// Case: TextEvent received on the socket
for(String userMessage: TextFrame.match(e._1)) {
room.say(user, userMessage);
}

// Case: Someone joined the room
for(ChatRoom.Join joined: ClassOf(ChatRoom.Join.class).match(e._2)) {
outbound.send("join:%s", joined.user);
}

// Case: New message on the chat room
for(ChatRoom.Message message: ClassOf(ChatRoom.Message.class).match(e._2)) {
outbound.send("message:%s:%s", message.user, message.text);
}

// Case: Someone left the room
for(ChatRoom.Leave left: ClassOf(ChatRoom.Leave.class).match(e._2)) {
outbound.send("leave:%s", left.user);
}

// Case: The socket has been closed
for(WebSocketClose closed: SocketClosed.match(e._1)) {
room.leave(user);
disconnect();
}

}

}

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
五芳斋JSH
2016-09-01 · 超过33用户采纳过TA的回答
知道答主
回答量:66
采纳率:0%
帮助的人:43.5万
展开全部
可以尝试使用httpclient
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ITjob5
2016-09-02 · TA获得超过209个赞
知道小有建树答主
回答量:399
采纳率:0%
帮助的人:351万
展开全部
可以尝试使用httpclient
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
初音盛下9e
2017-02-09
知道答主
回答量:4
采纳率:0%
帮助的人:1.9万
展开全部
如果有websocket要和spring整合请参考,说得很详细。http://www.tpyyes.com/a/javaweb/2017/0119/41.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式