怎样用java web和websocket实现网页即时通讯
5个回答
2017-02-18 · 知道合伙人互联网行家
关注
展开全部
使用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
双击左上角图标,弹出对话框,可以选择注册
注册成功
登录
搜索好友,如不提供搜索条件,则返回所有已注册用户
添加好友
添加好友提示
聊天
下载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
双击左上角图标,弹出对话框,可以选择注册
注册成功
登录
搜索好友,如不提供搜索条件,则返回所有已注册用户
添加好友
添加好友提示
聊天
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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();
}
}
}
}
}
<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();
}
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以尝试使用httpclient
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以尝试使用httpclient
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果有websocket要和spring整合请参考,说得很详细。http://www.tpyyes.com/a/javaweb/2017/0119/41.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询