在js 里面指定 ip 和端口,调用socket发请求,
不是websocket,不是使用http或者ws协议,而是直接使用tcp或者udp。
想达到类似于使用java Socket套接字一样的效果,直接使用socket 的输入输出流。
// 创建一个Socket实例
var socket = new WebSocket('ws://localhost:8080');
// 打开Socket
socket.onopen = function(event) {
// 发送一个初始化消息
socket.send('I am the client and I\'m listening!');
// 监听消息
socket.onmessage = function(event) {
console.log('Client received a message',event);
};
// 监听Socket的关闭
socket.onclose = function(event) {
console.log('Client notified socket has closed',event);
};
// 关闭Socket....
//socket.close()
};
好像只能用webscoket 的
Websocket
也可以用第三方的,例如goeasy,第一年免费,限发送量
可以直接调用tcp,但是有限制,而且只是个别浏览器有着功能。
火狐 :https://developer.mozilla.org/en-US/docs/Archive/B2G_OS/API/TCPSocket
Chrome:https://developer.chrome.com/apps/sockets_tcp
只能说,个别浏览器支持,而且太麻烦。最好java后台封装ws。
js中的web sockets
为了实现在单独的持久连接上提供全双工、双向通信的功能,HTML5中增加了连接API-WebSockets。在JavaScript中创建了WebSocket之后,会有一个HTTP请求发送到浏览器以发起连接。在取得服务器响应后,建立的连接会使用HTTP升级,从HTTP协议转变为web socket协议。具体的过程如下:
(1)客户端建立连接时,通过HTTP发起请求报文,如下所示
Upgrade:websocket
Connection:Upgrade
Sec-WebSocket-Key:
Sec-WebSocket-Protocol:
1
2
3
4
5
这两个字段表示请求服务器端升级协议为WebSocket,Sec-W
(2)服务器端处理完请求之后,响应如下报文
Upgrade:websocket
Connection:Upgrade
Sec-WebSocket-Accept:
Sec-WebSocket-Protocol:
1
2
3
4
5
该报文告知客户端正在更换协议,更新应用层协议为WebSocket协议。
web sockets API
要创建Web Socket,先实例一个webSocket对象并传入要连接的URL
var socket = new WebSocket('ws:www.example.com/server.php');
1
2
在这里需要注意,必须给WebSocket传入绝对URL。同源策略对Web Sockets不适用,因此可以通过它打开任何站点的连接。所以是否跟某个域中的页面通信,完全取决于服务器
实例化了WebSocket对象后,浏览器会马上尝试创建连接。WebSocket有一个表示当前状态的readyState属性。
WebSocket.OPENING(0):正在创建连接
WebSocket.OPEN(1):已经建立连接
WebSocket.CLOSING(2):正在关闭连接
WebSocket.CLOSING(3):已经关闭连接
readyState的值永远从0开始。
要关闭socket连接,可以在任何时候调用close()方法
socket.close();
发送和接收数据
Web Socket打开之后,就可以通过连接发送和接收数据。要向服务器发送数据,使用send()方法,并传入任意字符串。如
var socket = new WebSocket('ws:www.example.com/server.php');
socket.send('hello world');
1
2
3
在这里需要注意:因为WebSockets只能通过连接发送纯文本数据,所以对于复杂的数据结构,在通过连接发送之前,必须进行序列化。
当服务器向客户端发来消息时,WebSocket对象就会触发message事件。这个message事件与其他传递消息的协议类似,也是把返回的数据保存在event.data属性中
socket.onmessage = function(e){
var data = e.data;
//处理数据
};
1
2
3
4
5
值得一提的是data的数据格式也是字符串,如果想得到其他格式的数据,必须手工解析这些数据。
h5标准中并没有说要暴露出socket底层 只有封装好的WebSocket类
真要操作tcp或udp只能看浏览器支不支持 局限性很大