导航:首页 > 编程语言 > javahtmlwebsocket

javahtmlwebsocket

发布时间:2022-12-06 11:02:52

java http可以websocket不行

解决方案如下:
因为HTTPS是基于SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密,所以在HTTPS站点调用某些非SSL验证的资源时浏览器可能会阻止。
方案一:假设HTTPS站点使用Nginx服务器,其他服务器也是类似的思路,可以用服务器代理ws服务,可以用nginx的WebSocket proxying。
这样客户端请求的是wss://服务器,通过nginx的WebSocket proxying代理到实际不支持ssl的websocket服务器。
方案二:直接为WebSocket服务器增加ssl证书,这样就可以直接通过wss://来请求服务器了,以swoole为例,其他服务器也是类似的思路。

㈡ java websocket web网页聊天怎么实现

websocket 是反向推送的一种类型
聊天需要实时性高,在A第一次发送信息给B的时候需要建立websocket的连接,A向B发送信息就通过websocket完成。
A如果关闭窗口则websocket断开连接

㈢ html5 java js websocket相关问题

第一种服务器的推送:
首先你要了解 websocket的 握手动作,跟后台建立握手
然后因为你的后台要无数次的推送数据,所以你要了解后台的 task自动任务
自动任务有很多,已知的:springMVC(3.0以上)自带task(网络可知道)
其次重型点的框架:quartz 无缝兼容spring。
然后 设置定时任务,不断的向你的握手页面推送数据
websokcet 页面接受 over!!!!
第二种客户端的轮询:
客户端前台js 有个settimeout函数,跟java的timer函数一样 在里面嵌套一个ajax 不断的轮询发送请求,然后获取数据,在回调函数里面处理!(坏处:损耗服务器性能,并发量高。)

㈣ 怎样用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 web和websocket实现网页即时通讯

下面是一个java的多线程的WebServer的例子:

//import java.io.*;
import java.net.*;
//import java.util.*;

public final class WebServer {
public static void main(String argv[]) throws Exception
{
int port = 80;
// Establish the listen socket.
ServerSocket WebSocket = new ServerSocket(port);
while (true) {
// Listen for a TCP connection request.
Socket connectionSocket = WebSocket.accept();
//Construct object to process HTTP request message
HttpRequest request = new HttpRequest(connectionSocket);

Thread thread = new Thread(request); //Create new thread to process

thread.start(); //Start the thread

}
}
}

import java.io.*;
import java.net.*;
import java.util.*;

public final class HttpRequest implements Runnable {

final static String CRLF = "\r\n";//For convenience
Socket socket;

// Constructor
public HttpRequest(Socket socket) throws Exception
{
this.socket = socket;
}

// Implement the run() method of the Runnable interface.
public void run()
{
try {
processRequest();
} catch (Exception e) {
System.out.println(e);
}
}

private void processRequest() throws Exception
{
InputStream is = socket.getInputStream(); //Starts the input from client machine

DataOutputStream os = new DataOutputStream(
socket.getOutputStream());

// Set up input stream filters.

BufferedReader br = new BufferedReader(
new InputStreamReader(is));

String requestLine = br.readLine();

System.out.println(); //Echoes request line out to screen
System.out.println(requestLine);

//The following obtains the IP address of the incoming connection.

InetAddress incomingAddress = socket.getInetAddress();
String ipString= incomingAddress.getHostAddress();
System.out.println("The incoming address is: " + ipString);

//String Tokenizer is used to extract file name from this class.
StringTokenizer tokens = new StringTokenizer(requestLine);
tokens.nextToken(); // skip over the method, which should be “GET”
String fileName = tokens.nextToken();
// Prepend a “.” so that file request is within the current directory.
fileName = "." + fileName;

String headerLine = null;
while ((headerLine = br.readLine()).length() != 0) { //While the header still has text, print it
System.out.println(headerLine);
}

// Open the requested file.
FileInputStream fis = null;
boolean fileExists = true;
try {
fis = new FileInputStream(fileName);
} catch (FileNotFoundException e) {
fileExists = false;
}

//Construct the response message
String statusLine = null; //Set initial values to null
String contentTypeLine = null;
String entityBody = null;
if (fileExists) {
statusLine = "HTTP/1.1 200 OK: ";
contentTypeLine = "Content-Type: " +
contentType(fileName) + CRLF;
} else {
statusLine = "HTTP/1.1 404 Not Found: ";
contentTypeLine = "Content-Type: text/html" + CRLF;
entityBody = "<HTML>" + "<HEAD><TITLE>Not Found</TITLE></HEAD>" + "<BODY>Not Found</BODY></HTML>";
}
//End of response message construction

// Send the status line.
os.writeBytes(statusLine);

// Send the content type line.
os.writeBytes(contentTypeLine);

// Send a blank line to indicate the end of the header lines.
os.writeBytes(CRLF);

// Send the entity body.
if (fileExists) {
sendBytes(fis, os);
fis.close();
} else {
os.writeBytes(entityBody);
}

os.close(); //Close streams and socket.
br.close();
socket.close();

}

//Need this one for sendBytes function called in processRequest
private static void sendBytes(FileInputStream fis, OutputStream os)
throws Exception
{
// Construct a 1K buffer to hold bytes on their way to the socket.
byte[] buffer = new byte[1024];
int bytes = 0;

// Copy requested file into the socket’s output stream.
while((bytes = fis.read(buffer)) != -1 ) {
os.write(buffer, 0, bytes);
}
}
private static String contentType(String fileName)
{
if(fileName.endsWith(".htm") || fileName.endsWith(".html"))
return "text/html";
if(fileName.endsWith(".jpg"))
return "text/jpg";
if(fileName.endsWith(".gif"))
return "text/gif";
return "application/octet-stream";
}
}

㈥ JavaWeb里面装Socket

这种业务场景,我建议前后端都可以直接使用websocket来做实现啊。用websocket 不仅实时性高,而且还不费服务器资源的。

你可以参考网上的教程自己写websocket客户端,也可以采用第三方的websocket推送框架。我们项目目前就用的是【GoEasy】的websocket推送服务,前后端都在用,还是比较方便,集成起来挺快的,稳定性也不错的。

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

服务稳定的推送服务,前段时间研究了一下goeasy,后台推送只需要两行代码, js前端推送也只需要3,4行,而且文档齐全,还提供了后台查询信息收发情况,所以我觉得GoEasy推送服务是个不错的选择。
快速入门:https://goeasy.io/www/started
GoEasy web实时推送官网:https://goeasy.io
1. 引入goeasy.js
2. 客户端订阅,
Var goeasy = new GoEasy({appkey:’your appkey’});
goeasy.subscribe(channel:”your channel”, onMessage:function(message){alert(‘received message’+ message.content)})
3. 三种推送方式
Javascript: goeasy.publish({channel:’your channel’, message:’your publish msg’});
Java SDK: GoEasy goeasy = new GoEasy(“appkey”); goeasy.publish(“your channel”,”your msg”);
RestAPI: https://goeasy.io/goeasy/publish
三步轻松实现web推送及接收

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

原理

WebSocket protocol 。

现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客户端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的有用数据可能只是一个很小的值,这样会占用很多的带宽。

而比较新的技术去做轮询的效果是Comet – 用了AJAX。但这种技术虽然可达到全双工通信,但依然需要发出请求。

在 WebSocket API,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。在此WebSocket 协议中,为我们实现即时服务带来了两大好处:

1. Header

互相沟通的Header是很小的-大概只有 2 Bytes

2. Server Push

服务器的推送,服务器不再被动的接收到浏览器的request之后才返回数据,而是在有新数据时就主动推送给浏览器。

一、项目简介

WebSocket是HTML5一种新的协议,它实现了浏览器与服务器全双工通信,这里就将使用WebSocket来开发网页聊天室,前端框架会使用AmazeUI,后台使用Java,编辑器使用UMEditor。

二、涉及知识点

网页前端(HTML+CSS+JS)和Java

三、软件环境 Tomcat 7 JDK 7 Eclipse JavaEE 现代浏览器

四、效果截图

效果1

3. 编写后台代码

新建一个com.shiyanlou.chat的包,在包中创建一个名为ChatServer的类,从JavaEE 7开始就统一了WebSocket的API,因此无论是什么服务器,用Java写的代码都是一样的,代码如下:

?

041424344454647484950 package com.shiyanlou.chat;import java.text.SimpleDateFormat;import java.util.Date;import javax.websocket.OnClose;import javax.websocket.OnError;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.ServerEndpoint;import net.sf.json.JSONObject;/*** 聊天服务器类* @author shiyanlou**/@ServerEndpoint("/websocket")public class ChatServer {private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm"); // 日期格式化@OnOpenpublic void open(Session session) {// 添加初始化操作}/*** 接受客户端的消息,并把消息发送给所有连接的会话* @param message 客户端发来的消息* @param session 客户端的会话*/@OnMessagepublic void getMessage(String message, Session session) {// 把客户端的消息解析为JSON对象JSONObject jsonObject = JSONObject.fromObject(message);// 在消息中添加发送日期jsonObject.put("date", DATE_FORMAT.format(new Date()));// 把消息发送给所有连接的会话for (Session openSession : session.getOpenSessions()) {// 添加本条消息是否为当前会话本身发的标志jsonObject.put("isSelf", openSession.equals(session));// 发送JSON格式的消息openSession.getAsyncRemote().sendText(jsonObject.toString());}}@OnClosepublic void close() {// 添加关闭会话时的操作}@OnErrorpublic void error(Throwable t) {// 添加处理错误的操作}}

4. 前后台交互

后台写完了,前台要用WebSocket连接后台,需要新建一个WebSocket对象,然后就可以和服务器端进行交互,从浏览器发送消息给服务器端,同时要验证输入框的内容是否为空,然后接受服务端发送的消息,把它们动态地添加到聊天内容框中,在

?

04142434445464748495051525354 var um = UM.getEditor('myEditor');$('#nickname')[0].focus();// 新建WebSocket对象,最后的/websocket对应服务器端的@ServerEndpoint("/websocket")var socket = new WebSocket('ws://${pageContext.request.getServerName()}:${pageContext.request.getServerPort()}${pageContext.request.contextPath}/websocket');// 处理服务器端发送的数据socket.onmessage = function(event) {addMessage(event.data);};// 点击Send按钮时的操作$('#send').on('click', function() {var nickname = $('#nickname').val();if (!um.hasContents()) { // 判断消息输入框是否为空// 消息输入框获取焦点um.focus();// 添加抖动效果$('.ei-container').addClass('am-animation-shake');setTimeout("$('.ei-container').removeClass('am-animation-shake')", 1000);} else if (nickname == '') { // 判断昵称框是否为空//昵称框获取焦点$('#nickname')[0].focus();// 添加抖动效果$('#message-input-nickname').addClass('am-animation-shake');setTimeout("$('#message-input-nickname').removeClass('am-animation-shake')", 1000);} else {// 发送消息socket.send(JSON.stringify({content : um.getContent(),nickname : nickname}));// 清空消息输入框um.setContent('');// 消息输入框获取焦点um.focus();}});// 把消息添加到聊天内容中function addMessage(message) {message = JSON.parse(message);var messageItem = '<li class="am-comment '+ (message.isSelf ? 'am-comment-flip' : 'am-comment')+ '">'+ '<a href="javascript:void(0)" ><img src="assets/images/'+ (message.isSelf ? 'self.png' : 'others.jpg')+ '" alt="" width="48" height="48"/></a>'+ '<div><header><div>'+ '<a href="javascript:void(0)">'+ message.nickname + '</a> <time>' + message.date+ '</time></div></header>'+ '<div>' + message.content+ '</div></div></li>';$(messageItem).appendTo('#message-list');// 把滚动条滚动到底部$(".chat-content-container").scrollTop($(".chat-content-container")[0].scrollHeight);}

到这步,简单的网页聊天室就完成了,你可以多开几个窗口或在局域网中邀请小伙伴们来一起测试。

六、小结

本次项目课使用WebSocket实现了简单的网页聊天室,其实WebSocket不仅可以应用于浏览器,也可以应用于桌面客户端。

㈨ java怎么做websocket

我不知道你想用websocket实现什么样的功能,一般配合HTML5的话websocket可以解决服务端和客户端消息实时传递的问题,如消息推送(webQQ这种)。它的初始连接是http转成websocket连接。
实现的话要做两件事,一端是在服务器实现service,这个有点像tcplistener一样;
另一个是客户端(浏览器)开发,可以用JS实现:
<html>
<head>
<meta
charset="utf-8"
/>
<script
type="text/javascript">
var
host
=
'127.0.0.1';
var
port
=
8080;
var
url
=
'ws://'+host+':'+port+'/';
var
w
=
new
WebSocket(url);
//构建于服务器之间的连接通信
<!--var
audioElement
=
document.createElement('audio');
-->
<!--audioElement.setAttribute('src',
'qqmsg.mp3');-->
w.onopen
=
function()//通过onopen事件句柄来监听socket的打开事件
{
$('chat-box').innerHTML
=
'已连接到服务器......<br/>';
}
w.onmessage
=
function(e)//用onmessage事件句柄接受服务器传过来的数据
{
var
msg
=
e.data;
var
chatBox
=
$('chat-box');
//
audioElement.play();
chatBox.innerHTML
=
chatBox.innerHTML+msg+'<br/>';
}
function
send()//使用send方法向服务器发送数据
{
var
talk
=
$('talk');
var
nike
=
$('nike');
w.send('<strong
style="color:red">'+nike.value+':</strong>'+talk.value);
}
function
$(id)
{
return
document.getElementById(id);
}
</script>
</head>
<body>
<div
id="chat-box"
style="border:1px
solid
#cccccc;
width:400px;
height:400px;
overflow:scroll;"></div>
昵称:
<input
type="text"
id="nike"/>
<br/>
内容:
<input
type="text"
id="talk"/>
<input
type="button"
id="send"
onClick="send();"
value="发送"/>
</body>
可参考IBM社区
http://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/
</html>

阅读全文

与javahtmlwebsocket相关的资料

热点内容
小米sd卡解压 浏览:996
程序员那么可爱陆漓替老袁说情 浏览:28
当女程序员遇见问题 浏览:746
32位编译器什么意思 浏览:355
php多参数函数 浏览:17
通达信板块动作源码 浏览:751
matlab完全自学一本通pdf 浏览:250
php源码本地安装 浏览:961
服务器怎么用不会断电 浏览:301
主从服务器有什么用 浏览:213
jstlpdf 浏览:15
安卓原神在哪个app下载 浏览:808
单片机编程技术什么意思 浏览:104
e点课堂源码 浏览:46
免费打击垫app哪个好 浏览:532
程序员必装的6款软件 浏览:750
基于单片机的遥控器设计 浏览:521
安卓如何取消圆图标 浏览:11
收件服务器怎么样 浏览:48
建筑设计规范pdf 浏览:99