Ⅰ java如何實現一對一聊天謝謝了。
WebSocket 是 HTML5 開始提供的一種在單個 TCP 連接上進行全雙工通訊的協議。
WebSocket 使得客戶端和伺服器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。在 WebSocket API 中,瀏覽器和伺服器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,並進行雙向數據傳輸。
在 WebSocket API 中,瀏覽器和伺服器只需要做一個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以數據互相傳送。
Ⅱ 怎樣用java web和websocket實現網頁即時通訊
使用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
雙擊左上角圖標,彈出對話框,可以選擇注冊
注冊成功
登錄
搜索好友,如不提供搜索條件,則返回所有已注冊用戶
添加好友
添加好友提示
聊天
Ⅲ java websocket web網頁聊天怎麼實現
websocket 是反向推送的一種類型
聊天需要實時性高,在A第一次發送信息給B的時候需要建立websocket的連接,A向B發送信息就通過websocket完成。
A如果關閉窗口則websocket斷開連接
Ⅳ java socket 怎麼給websocket發信息
1.InitServlet
該類主要是用來初始化構造將來存儲用戶身份信息的map倉庫,利用其初始化方法Init 初始化倉庫, 利用其靜態方法getSocketList 獲得對應的用戶身份信息。
webSocket ,我認為MessageInbound 用來識別登錄人的信息,用它來找到對應的人,推送消息。每次登錄都會產生一個MessageInbound。
這里的HashMap<String,MessageInbound> :string 存儲用戶session的登錄id,MessageInbound存儲 推送需要的身份信息。以上屬於個人口頭話理解。
packagesocket;
importjava.nio.CharBuffer;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjavax.servlet.ServletConfig;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importorg.apache.catalina.websocket.MessageInbound;
{
=-3163557381361759907L;
//privatestaticList<MessageInbound>socketList;
privatestaticHashMap<String,MessageInbound>socketList;
publicvoidinit(ServletConfigconfig)throwsServletException{
//InitServlet.socketList=newArrayList<MessageInbound>();
InitServlet.socketList=newHashMap<String,MessageInbound>();
super.init(config);
System.out.println("Serverstart============");
}
publicstaticHashMap<String,MessageInbound>getSocketList(){
returnInitServlet.socketList;
}
/*publicstaticList<MessageInbound>getSocketList(){
returnInitServlet.socketList;
}
*/}
2.MyWebSocketServlet
websocket用來建立連接的servlet,建立連接時,首先在session獲取該登錄人的userId,在調用MyMessageInbound構造函數傳入userId
packagesocket;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.nio.CharBuffer;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.catalina.websocket.StreamInbound;
importorg.apache.catalina.websocket.WebSocketServlet;
/**
*
*@ClassName:MyWebSocketServlet
*@Description:建立連接時創立
*@authormangues
*@date2015-7-19
*/
{
publicStringgetUser(HttpServletRequestrequest){
StringuserName=(String)request.getSession().getAttribute("user");
if(userName==null){
returnnull;
}
returnuserName;
//return(String)request.getAttribute("user");
}
@Override
(Stringarg0,
HttpServletRequestrequest){
System.out.println("##########");
returnnewMyMessageInbound(this.getUser(request));
}
}
3.onOpen方法調用InitServlet的map身份倉庫,
放入用戶userId 和 對應該登錄用戶的websocket身份信息MessageInbound (可以用userId來尋找到推送需要的 身份MessageInbound)
onTextMessage :用來獲取消息,並發送消息
packagesocket;
importjava.io.IOException;
importjava.nio.ByteBuffer;
importjava.nio.CharBuffer;
importjava.util.HashMap;
importorg.apache.catalina.websocket.MessageInbound;
importorg.apache.catalina.websocket.WsOutbound;
importutil.MessageUtil;
{
privateStringname;
publicMyMessageInbound(){
super();
}
publicMyMessageInbound(Stringname){
super();
this.name=name;
}
@Override
protectedvoidonBinaryMessage(ByteBufferarg0)throwsIOException{
//TODOAuto-generatedmethodstub
}
@Override
protectedvoidonTextMessage(CharBuffermsg)throwsIOException{
//用戶所發消息處理後的map
HashMap<String,String>messageMap=MessageUtil.getMessage(msg);//處理消息類
//上線用戶集合類map
HashMap<String,MessageInbound>userMsgMap=InitServlet.getSocketList();
StringfromName=messageMap.get("fromName");//消息來自人的userId
StringtoName=messageMap.get("toName");//消息發往人的userId
//獲取該用戶
MessageInboundmessageInbound=userMsgMap.get(toName);//在倉庫中取出發往人的MessageInboundif(messageInbound!=null){//如果發往人存在進行操作
WsOutboundoutbound=messageInbound.getWsOutbound();
Stringcontent=messageMap.get("content");//獲取消息內容
StringmsgContentString=fromName+""+content;//構造發送的消息
//發出去內容
CharBuffertoMsg=CharBuffer.wrap(msgContentString.toCharArray());
outbound.writeTextMessage(toMsg);//
outbound.flush();
}/*for(MessageInboundmessageInbound:InitServlet.getSocketList()){
CharBufferbuffer=CharBuffer.wrap(msg);
WsOutboundoutbound=messageInbound.getWsOutbound();
outbound.writeTextMessage(buffer);
outbound.flush();
}*/
}
@Override
protectedvoidonClose(intstatus){
InitServlet.getSocketList().remove(this);
super.onClose(status);
}
@Override
protectedvoidonOpen(WsOutboundoutbound){
super.onOpen(outbound);
//登錄的用戶注冊進去
if(name!=null){
InitServlet.getSocketList().put(name,this);
}
//InitServlet.getSocketList().add(this);
}
}
4.消息處理類,處理前端發來的消息
packageutil;
importjava.nio.CharBuffer;
importjava.util.HashMap;
/**
*
*@ClassName:MessageUtil
*@Description:消息處理類
*@authormangues
*@date2015-7-19
*/
publicclassMessageUtil{
publicstaticHashMap<String,String>getMessage(CharBuffermsg){
HashMap<String,String>map=newHashMap<String,String>();
StringmsgString=msg.toString();
Stringm[]=msgString.split(",");
map.put("fromName",m[0]);
map.put("toName",m[1]);
map.put("content",m[2]);
returnmap;
}
}
Ⅳ 使用java+js如何實現網頁在線聊天功能
聊天用到的問題其實就是websocket的頻道訂閱機制,這里需要用到單人聊天就是相互訂閱對方的頻道然後進行消息推送。
Ⅵ javaweb如何在網頁實現聊天功能
後端技術就沒什麼好說的了,最簡單的是利用application范圍保存聊天記錄.要求高一點可以是用類似redis的技術.
前端的話,
1,最簡單的,通過刷新頁面,每次請求消息記錄頁面.
2.Ajax技術.(1)Ajax輪詢,(2)Ajax長連接.
3.websocket.類似socket,效率很高.需要Tomcat7才能支持.並且要求瀏覽器的版本較高.
Ⅶ 基於tomcat7,java,ext,websocket 怎麼和指定的一個人進行聊天
簡單來說,extjs <-> java/tomcat websocket鏈接。java端維護鏈接列表。extjs端發送信息,至少包含from to message三個。由extjs做客戶端實現GUI,用戶輸入具體發送什麼消息,發送給誰,完成後通過websocket鏈接發送到java端,Java端根據to信息選擇相應的websocket鏈接發送到另一個GUI端,然後由extjs的處理程序在另一個GUI上顯示。當然要一個最小的功能集至少要有:
發送:參數 from to message, from是為了另一個GUI可以實現類似reply的功能,或者類似私聊窗口的功能。to代表目標,可以擴展意義為組群發或者全員群發等
登錄: 參數 name
退出:無參數
獲取在線用戶列表:無參數
java/tomcat端維護的websocket列表至少要是一個map的形式,即name->websocket的map
Ⅷ 想求一個java聊天小程序,使用圖形用戶界面和socket通訊 功能:可以實現兩個人私聊功能和多人聊天功能。
我只介紹思路:
使用websocket創建ws伺服器,nat123解析一個地址,分配一個埠給他用,發布到外網。
客戶端撥通地址 登陸 接入websocket服務,心跳機制要做好,上下線掉線更新列表,注冊存儲用戶信息,更新用戶列表。
客戶端可以發起群聊、私聊、收發文件、分享,甚至發送伺服器消息,然後反饋消息,響應遠程服務事件。
這就是一個聊天軟體所做的事情,我介紹websocket可以響應多平台,多端通信。
Ⅸ java消息推送websocket怎麼實現
java消息推送websocket實現原理:在實現websocket連線過程中,需要通過瀏覽器發出websocket連線請求,然後伺服器發出回應,這個過程通常稱為「握手」 。在 WebSocket API,瀏覽器和伺服器只需要做一個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以數據互相傳送。