带ssl的websocket例子
还是在那个websocket_demo的例子
- rebar-creator create-app websocket_demo
tree一下看看大概目录
- ├── cert
- │ ├── cowboy-ca.crt
- │ ├── server.crt
- │ └── server.key
- ├── src
- │ ├── path_helper.erl
- │ ├── route_helper.erl
- │ ├── websocket_demo.app.src
- │ ├── websocket_demo_app.erl
- │ └── ws_handler.erl
- ├── static
- │ ├── index.html
- │ └── js
- │ └── jquery.min.js
cert目录从cowboy的sample里面的拿过来即可,ca证书需要全部信任,浏览器得重启,具体google看看
static目录随便弄点过来显示下https即可,这个用来测试证书有没有问题的
直接贴代码
path_helper.erl
- -module(path_helper).
- -export([get_path/]).
- get_path(ExtraPath)->
- {ok,CurrentPath} = file:get_cwd(),
- Path = string:concat(CurrentPath,"/"),
- string:concat(Path,ExtraPath).
route_helper.erl
- -module(route_helper).
- -export([get_routes/]).
- get_routes() ->
- StaticPath = path_helper:get_path("../static/"),
- [
- {'_', [
- {"/websocket", ws_handler, []},
- {"/static/[...]", cowboy_static, {dir, StaticPath}}
- ]}
- ].
websocket_demo_app.erl
- -module(websocket_demo_app).
- -behaviour(application).
- -export([start/, stop/]).
- start(_Type, _Args) ->
- ok = application:start(crypto),
- ok = application:start(cowlib),
- ok = application:start(ranch),
- ok = application:start(cowboy),
- CertDir = path_helper:get_path("../cert/"),
- io:format("~p~n",[CertDir]),
- Routes = route_helper:get_routes(),
- Dispatch = cowboy_router:compile(Routes),
- Port = ,
- TransOpts = [
- {port, Port},
- {cacertfile, CertDir ++ "/cowboy-ca.crt"},
- {certfile, CertDir ++ "/server.crt"},
- {keyfile, CertDir ++ "/server.key"}
- ],
- ProtoOpts = [{env, [{dispatch, Dispatch}]}],
- {ok, _} = cowboy:start_https(https,, TransOpts, ProtoOpts).
- stop(_State) ->
- ok.
ws_handler.erl
- -module(ws_handler).
- -behaviour(cowboy_websocket_handler).
- -export([init/]).
- -export([websocket_init/]).
- -export([websocket_handle/]).
- -export([websocket_info/]).
- -export([websocket_terminate/]).
- init({tcp, http}, _Req, _Opts) ->
- io:format("init ~n"),
- {upgrade, protocol, cowboy_websocket};
- init({ssl, http}, _Req, _Opts) ->
- io:format("ssl init ~n"),
- {upgrade, protocol, cowboy_websocket}.
- websocket_init(_TransportName, Req, _Opts) ->
- io:format("websocket_init ~n"),
- erlang:start_timer(, self(), <<"Hello!">>),
- {ok, Req, undefined_state}.
- websocket_handle({text, Msg}, Req, State) ->
- %% io:format("websocket_handle text ~p,~p,~p~n",[Msg,Req,State]),
- {reply, {text, << "That's what she said! ", Msg/binary >>}, Req, State};
- websocket_handle(_Data, Req, State) ->
- %% io:format("websocket_handle ~p,~p,~p~n",[_Data,Req,State]),
- {ok, Req, State}.
- websocket_info({timeout, _Ref, Msg}, Req, State) ->
- %io:format("websocket timeout ~n"),
- erlang:start_timer(, self(), <<"How' you doin'?">>),
- {reply, {text, Msg}, Req, State};
- websocket_info(_Info, Req, State) ->
- io:format("websocket_info ~p,~p,~p~n",[_Info,Req,State]),
- {ok, Req, State}.
- websocket_terminate(_Reason, _Req, _State) ->
- io:format("terminate ~n"),
- ok.
注意,在ssl的是,init的参数
在线测试http://www.baiyangliu.com/lab/websocket/
本地websocket测试地址
- wss://loclahost:8080/websocket
如果提示ssl错误什么的,最好先看看下面这个对不对
https://localhost:8080/static/index.html
注:ssl以后,访问必须以域名,不能ip。
带ssl的websocket例子的更多相关文章
- 用nodejs快速实现websocket服务端(带SSL证书生成)
有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的 ...
- golang gorilla websocket例子
WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端. WebSocket通信协议于2011年被IETF定 ...
- PHP 通过带SSL的SMTP 发送邮件的处理
客户端与SMTP服务器的通讯, 是通过固定的命令以及返回编号完成的. 发送Email, 需要经过的步骤有创建socket (区分带ssl, 还是不带ssl)执行命令, 并检查返回值是否与预期一致, 不 ...
- Qt官方对OpenSSL的编译方法的描述,单独下载的Qt library则一般不带SSL(包括QT FAQ)
https://wiki.qt.io/MSYS2http://wiki.qt.io/Compiling_OpenSSL_with_MinGWhttps://wiki.qt.io/MinGW-64-bi ...
- Web通信协议:OSI、TCP、UDP、Socket、HTTP、HTTPS、TLS、SSL、WebSocket、Stomp
1 各层的位置 1.1 OSI七层模型全景图 OSI是Open System Interconnect的缩写,意为开放式系统互联. 1.2 五层网络协议 在七层的基础上, ...
- Spring Boot SSL [https]配置例子
前言 本文主要介绍Spring Boot HTTPS相关配置,基于自签证书实现: 通过本例子,同样可以了解创建SSL数字证书的过程: 本文概述 Spring boot HTTPS 配置 server. ...
- 带你走近WebSocket协议
一.WebSocket协议是什么? WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. 二.那为什么我们要用WebSocket协议呢? 了解计算机网络协议的 ...
- 带SSL证书的httpclient 远程接口工具类
package com.iups.wx.util; import java.io.IOException; import java.io.UnsupportedEncodingException; i ...
- 在Mac上搭建带ssl协议和域名指向的Apache服务器
顾名思义,就是要在苹果电脑上搭建 Apache 服务器,并且支持 https 协议,能用指定域名访问(有些开发调试需要注册域名,比如调试微信JS-SDK),当然最好能在手机端进行调试.首先,Mac 系 ...
随机推荐
- Neutron三层网络服务实现原理
Neutron 对虚拟三层网络的实现是通过其 L3 Agent (neutron-l3-agent).该 Agent 利用 Linux IP 栈.route 和 iptables 来实现内网内不同网络 ...
- Access control allow origin 简单请求和复杂请求
原文地址:http://blog.csdn.net/wangjun5159/article/details/49096445 错误信息: XMLHttpRequest cannot load http ...
- 依存可视化︱Dependency Viewer——南京大学自然语言处理研究组
来源网页:http://nlp.nju.edu.cn/tanggc/tools/DependencyViewer.html 视频演示网页:http://nlp.nju.edu.cn/tanggc/to ...
- CS231n课程笔记翻译2:图像分类笔记
译者注:本文智能单元首发,译自斯坦福CS231n课程笔记image classification notes,由课程教师Andrej Karpathy授权进行翻译.本篇教程由杜客翻译完成.Shiqin ...
- ubuntu下mysql安装提供外网访问
修改配置文件 1. sudo apt-get install mysql-server #安装mysql服务器 2. sudo apt-get install mysql-client #安装mys ...
- Hibernate 一对一 (one-to-one)
一对一(one-to-one)实例(Person-IdCard) 一对一的关系在数据库中表示为主外关系.例如.人和身份证的关系.每个人都对应一个身份证号.我们应该两个表.一个是关于人信息的表(Pers ...
- 编程技巧:使用整数同时进行多个true|false判断
情景 : 假设需要判断某银行用户的其中一个账号(profileA),币种(Currency)为人民币(CNY),余额是否大于1,0000,然后进行某业务逻辑处理. 概述: 为了进行这种判断,需要判断/ ...
- Map集合学习
Java中常用的Map实现类主要有:HashMap.HashTable.TreeMap.LinkedHashMap. 一:HashMap HashMap介绍 HashMap的底层其实是“链表的数组”, ...
- POJ3422 Kaka's Matrix Travels 【费用流】*
POJ3422 Kaka's Matrix Travels Description On an N × N chessboard with a non-negative number in each ...
- nginx+tomcat 配置负载均衡集群 (转载)
一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章<一台机器同时启动多个tomcat>. nginx官网下载解压版n ...