还是在那个websocket_demo的例子

  1. rebar-creator create-app websocket_demo

tree一下看看大概目录

  1. ├── cert
  2.    ├── cowboy-ca.crt
  3.    ├── server.crt
  4.    └── server.key
  5. ├── src
  6.    ├── path_helper.erl
  7.    ├── route_helper.erl
  8.    ├── websocket_demo.app.src
  9.    ├── websocket_demo_app.erl
  10.    └── ws_handler.erl
  11. ├── static
  12.    ├── index.html
  13.    └── js
  14.    └── jquery.min.js

cert目录从cowboy的sample里面的拿过来即可,ca证书需要全部信任,浏览器得重启,具体google看看

static目录随便弄点过来显示下https即可,这个用来测试证书有没有问题的

直接贴代码

path_helper.erl

  1. -module(path_helper).
  2.  
  3. -export([get_path/]).
  4.  
  5. get_path(ExtraPath)->
  6. {ok,CurrentPath} = file:get_cwd(),
  7. Path = string:concat(CurrentPath,"/"),
  8. string:concat(Path,ExtraPath).

route_helper.erl

  1. -module(route_helper).
  2.  
  3. -export([get_routes/]).
  4.  
  5. get_routes() ->
  6. StaticPath = path_helper:get_path("../static/"),
  7. [
  8. {'_', [
  9. {"/websocket", ws_handler, []},
  10. {"/static/[...]", cowboy_static, {dir, StaticPath}}
  11. ]}
  12. ].

websocket_demo_app.erl

  1. -module(websocket_demo_app).
  2.  
  3. -behaviour(application).
  4.  
  5. -export([start/, stop/]).
  6.  
  7. start(_Type, _Args) ->
  8.  
  9. ok = application:start(crypto),
  10. ok = application:start(cowlib),
  11. ok = application:start(ranch),
  12. ok = application:start(cowboy),
  13.  
  14. CertDir = path_helper:get_path("../cert/"),
  15. io:format("~p~n",[CertDir]),
  16.  
  17. Routes = route_helper:get_routes(),
  18. Dispatch = cowboy_router:compile(Routes),
  19. Port = ,
  20. TransOpts = [
  21. {port, Port},
  22. {cacertfile, CertDir ++ "/cowboy-ca.crt"},
  23. {certfile, CertDir ++ "/server.crt"},
  24. {keyfile, CertDir ++ "/server.key"}
  25. ],
  26. ProtoOpts = [{env, [{dispatch, Dispatch}]}],
  27.  
  28. {ok, _} = cowboy:start_https(https,, TransOpts, ProtoOpts).
  29.  
  30. stop(_State) ->
  31. ok.

ws_handler.erl

  1. -module(ws_handler).
  2. -behaviour(cowboy_websocket_handler).
  3.  
  4. -export([init/]).
  5. -export([websocket_init/]).
  6. -export([websocket_handle/]).
  7. -export([websocket_info/]).
  8. -export([websocket_terminate/]).
  9.  
  10. init({tcp, http}, _Req, _Opts) ->
  11. io:format("init ~n"),
  12. {upgrade, protocol, cowboy_websocket};
  13. init({ssl, http}, _Req, _Opts) ->
  14. io:format("ssl init ~n"),
  15. {upgrade, protocol, cowboy_websocket}.
  16.  
  17. websocket_init(_TransportName, Req, _Opts) ->
  18. io:format("websocket_init ~n"),
  19. erlang:start_timer(, self(), <<"Hello!">>),
  20. {ok, Req, undefined_state}.
  21.  
  22. websocket_handle({text, Msg}, Req, State) ->
  23. %% io:format("websocket_handle text ~p,~p,~p~n",[Msg,Req,State]),
  24. {reply, {text, << "That's what she said! ", Msg/binary >>}, Req, State};
  25. websocket_handle(_Data, Req, State) ->
  26. %% io:format("websocket_handle ~p,~p,~p~n",[_Data,Req,State]),
  27. {ok, Req, State}.
  28.  
  29. websocket_info({timeout, _Ref, Msg}, Req, State) ->
  30. %io:format("websocket timeout ~n"),
  31. erlang:start_timer(, self(), <<"How' you doin'?">>),
  32. {reply, {text, Msg}, Req, State};
  33. websocket_info(_Info, Req, State) ->
  34. io:format("websocket_info ~p,~p,~p~n",[_Info,Req,State]),
  35. {ok, Req, State}.
  36.  
  37. websocket_terminate(_Reason, _Req, _State) ->
  38. io:format("terminate ~n"),
  39. ok.

注意,在ssl的是,init的参数

在线测试http://www.baiyangliu.com/lab/websocket/

本地websocket测试地址

  1. wss://loclahost:8080/websocket

如果提示ssl错误什么的,最好先看看下面这个对不对

https://localhost:8080/static/index.html

注:ssl以后,访问必须以域名,不能ip。

带ssl的websocket例子的更多相关文章

  1. 用nodejs快速实现websocket服务端(带SSL证书生成)

    有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的 ...

  2. golang gorilla websocket例子

    WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端. WebSocket通信协议于2011年被IETF定 ...

  3. PHP 通过带SSL的SMTP 发送邮件的处理

    客户端与SMTP服务器的通讯, 是通过固定的命令以及返回编号完成的. 发送Email, 需要经过的步骤有创建socket (区分带ssl, 还是不带ssl)执行命令, 并检查返回值是否与预期一致, 不 ...

  4. 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 ...

  5. Web通信协议:OSI、TCP、UDP、Socket、HTTP、HTTPS、TLS、SSL、WebSocket、Stomp

    1      各层的位置 1.1      OSI七层模型全景图 OSI是Open System Interconnect的缩写,意为开放式系统互联. 1.2      五层网络协议 在七层的基础上, ...

  6. Spring Boot SSL [https]配置例子

    前言 本文主要介绍Spring Boot HTTPS相关配置,基于自签证书实现: 通过本例子,同样可以了解创建SSL数字证书的过程: 本文概述 Spring boot HTTPS 配置 server. ...

  7. 带你走近WebSocket协议

    一.WebSocket协议是什么? WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. 二.那为什么我们要用WebSocket协议呢? 了解计算机网络协议的 ...

  8. 带SSL证书的httpclient 远程接口工具类

    package com.iups.wx.util; import java.io.IOException; import java.io.UnsupportedEncodingException; i ...

  9. 在Mac上搭建带ssl协议和域名指向的Apache服务器

    顾名思义,就是要在苹果电脑上搭建 Apache 服务器,并且支持 https 协议,能用指定域名访问(有些开发调试需要注册域名,比如调试微信JS-SDK),当然最好能在手机端进行调试.首先,Mac 系 ...

随机推荐

  1. Neutron三层网络服务实现原理

    Neutron 对虚拟三层网络的实现是通过其 L3 Agent (neutron-l3-agent).该 Agent 利用 Linux IP 栈.route 和 iptables 来实现内网内不同网络 ...

  2. Access control allow origin 简单请求和复杂请求

    原文地址:http://blog.csdn.net/wangjun5159/article/details/49096445 错误信息: XMLHttpRequest cannot load http ...

  3. 依存可视化︱Dependency Viewer——南京大学自然语言处理研究组

    来源网页:http://nlp.nju.edu.cn/tanggc/tools/DependencyViewer.html 视频演示网页:http://nlp.nju.edu.cn/tanggc/to ...

  4. CS231n课程笔记翻译2:图像分类笔记

    译者注:本文智能单元首发,译自斯坦福CS231n课程笔记image classification notes,由课程教师Andrej Karpathy授权进行翻译.本篇教程由杜客翻译完成.Shiqin ...

  5. ubuntu下mysql安装提供外网访问

    修改配置文件 1. sudo apt-get install mysql-server #安装mysql服务器 2. sudo apt-get install  mysql-client #安装mys ...

  6. Hibernate 一对一 (one-to-one)

    一对一(one-to-one)实例(Person-IdCard) 一对一的关系在数据库中表示为主外关系.例如.人和身份证的关系.每个人都对应一个身份证号.我们应该两个表.一个是关于人信息的表(Pers ...

  7. 编程技巧:使用整数同时进行多个true|false判断

    情景 : 假设需要判断某银行用户的其中一个账号(profileA),币种(Currency)为人民币(CNY),余额是否大于1,0000,然后进行某业务逻辑处理. 概述: 为了进行这种判断,需要判断/ ...

  8. Map集合学习

    Java中常用的Map实现类主要有:HashMap.HashTable.TreeMap.LinkedHashMap. 一:HashMap HashMap介绍 HashMap的底层其实是“链表的数组”, ...

  9. POJ3422 Kaka's Matrix Travels 【费用流】*

    POJ3422 Kaka's Matrix Travels Description On an N × N chessboard with a non-negative number in each ...

  10. nginx+tomcat 配置负载均衡集群 (转载)

    一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章<一台机器同时启动多个tomcat>. nginx官网下载解压版n ...