网络杂谈, Docker, MongoDB

来源:互联网 发布:广州淘宝培训汇学好 编辑:程序博客网 时间:2024/06/05 22:44

https://antkillerfarm.github.io/

网络杂谈

集线器&交换机&路由器

1.集线器,又名HUB。一般只起增强信号的作用,并不对流经的数据进行处理。数据转发采用广播方式,只适合少量终端设备的情况。

2.交换机。它会对转发数据的数据链路层(OSI第二层)进行处理。

2.路由器。它会对转发数据的网络层(OSI第三层)进行处理。

以上都是一些原始定义,实际情况中,由于都是网络数据交换设备,跨界的情况随着硬件的升级,而屡见不鲜。比如现在的集线器,多数也有简单的数据处理能力;而现在的交换机,有的也有第三层处理能力(比如三层交换机)。

以我的经历为例,2003年左右,大学宿舍的兄弟们就使用集线器,进行联网游戏。

2007年,换用交换机,和合租的同事,一起上网。

2010年,换用无线路由器,手机也可以wifi上网了。

XMPP

XMPP(Extensible Messaging Presence Protocol)和SIP(Session Initiation Protocol)都是应用层的数据交换协议。作为它们前辈的HTTP虽然取得很大成功,但也存在如下问题:

1.内容形式主要限定为html,对于传输非界面数据的应用来说,效率不高,也不专业。

2.HTTP基于Client发送请求,Server响应的模式。对于VOIP这样的应用来说,Server主动发送数据的能力显然更关键。

XMPP和SIP的特点如下表所示:

XMPP SIP 核心协议的目的 服务于结构化的数据交换 服务于连接的建立 核心外扩展 添加Jingle协议支持面向连接的业务 添加SIMPLE协议支持即时通信业务 应用支持和扩展性 优 一般 数据格式 XML,易解析 文本,不易解析。 通道方式 控制和数据通道是一体的,Clent只与Server建立连接,而Client与client之间是没有连接的。Client之间传送的通道是:Client1–>Server1–>Server2–>Client2。这种方式看起来扩展性差,Server压力很大,但是能够实现很好的业务功能,比如留言、广播、群聊、状态更新、Blog、微博、数据共享等等。 连接建立通道与数据传送通道是各自独立的,连接建立在Client与Server之间,而数据传送通道是在Client–>Client之间直接进行的。这个对视频、语音和文件传送业务很合适,但是不适合其他形式的应用。 底层协议 TCP and TLS only UDP, TCP and TLS 连接方式 单向连接,只有Client可以向Server发起连接请求,Server不会向Client发起连接。这样便于NAT和firewall的穿越。 双向对称,客户端和服务器都可以主动发起连接请求并响应,这种对称连接的方式在穿越NAT和firewall的时候,带来很大的复杂性,无法保证穿越NAT。 前景 开源实现众多,应用广泛。且被Google、MS、Facebook等巨头支持,前景乐观。 核心外业务没有起色。核心业务也遭到Jingle协议的挑战。

参考文献:

http://my.oschina.net/linuxhunter/blog/35370

基于loudmouth的XMPP客户端DEMO

http://xmpp.org/xmpp-software/

这个网页列出了XMPP的各种客户端、服务器以及库的实现。在我们的项目中,服务端使用Openfire,嵌入式客户端使用gloox。

http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html

Openfire的聊天记录插件开发。

Openfire

安装

Openfire的官网是:

http://www.igniterealtime.org/projects/openfire/

从官网可下载源代码包和可执行文件包,这里选用deb格式的安装包。安装之后的文件主要在:

1./etc/openfire。配置文件目录

2./usr/share/openfire。可执行文件及jar库的目录。

运行

可以使用以下命令:

/etc/init.d/openfire {start|stop|restart|status|condrestart|reload}

设置

web设置可访问以下网址:

http://127.0.0.1:9090

Spark

Spark和Openfire都是Ignite Realtime的产品。Spark是一个Java写的XMPP客户端。注意,这个Spark和Hadoop生态圈的Spark不是同一个软件。

我一开始直接下载二进制包,但无法运行,原因不详。

于是改用源代码编译的方式。源代码地址:

https://github.com/igniterealtime/Spark

编译方法:

cd build

ant

可执行程序:arget/build/bin/startup.sh

登陆时的“服务器”一栏,要填写服务器名称,填IP地址是不行的。

osip & eXosip

osip是SIP协议的一个开源实现。其官网为:

http://savannah.gnu.org/projects/osip

eXosip在osip上封装了一层,简化了在多媒体会话方面SIP协议的使用。其官网为:

http://savannah.nongnu.org/projects/exosip/

IRC

最近,由于捣鼓VNC剪贴板没有结果,我不得不寻找它的替代方案,这时IRC进入了我的视线。

IRC虽然没有XMPP那么强的功能,但毕竟是20年前的东西了,各种资料和支持都比较完善,使用配置也没有后者那么复杂,是个不错的东西。

IRC Server

这里推荐两款:

1.ircd-hybrid

http://ircd-hybrid.org/

2.unrealircd

https://www.unrealircd.org/

安装教程:

http://soft.dog/2016/03/25/unrealircd-basic/

IRC Client

开始使用的是hexchat。官网:

https://hexchat.github.io

Windows版本做的不错,但Linux版本老是运行不起来。。。

最后一气之下,想到了emacs,而后者也不负所望。

M-x erc

IRC命令

常用IRC命令参见:

https://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands

注意细节如下:

1.join命令中输入的channel名如果不存在,则会创建channel。相当于该命令既是加入命令,也是创建命令。

NTP

Network Time Protocol,是用来让计算机之间实现时间同步的协议。

网上可用的NTP Server列表,可参见:

http://www.pool.ntp.org/en/

NTP的Client有很多,这里使用ntpclient软件。它的官网:

http://doolittle.icarus.com/ntpclient/

调试的时候,可以使用如下命令设置时间:

sudo date -s 10:00:00

修改之后,可用date命令查看系统当前时间,确认修改的效果。

ntpd是NTP的另一个实现,既可以当Server,也可以当Client,已经被集成进busybox。

socket通信基本流程

TCP

服务器端                           客户端1.创建socket                       1.创建socket2.bind                             2.listen4.accept----等待客户端连接----              3.connect5.读数据(recv4.写数据(send6.写数据(send5.读数据(recv7.关闭socket(closesocket)         6.关闭socket(closesocket)

UDP

服务器端:                          客户端1.创建socket                       1.创建socket2.bind                             2.bind3.recvfrom                         ----等待连接----                    3.sendto4.sendto                           4.recvfrom5.关闭socket(closesocket)         5.关闭socket(closesocket)

WIFI WPS

WPS分为PBC(BUTTON)和PIN两种方式

PBC

按WPS按钮实现WPS安全连接。

在AP中,在WPS设置中,设置为启用。

按一下客户端(无线网卡)上的WPS按键,搜索WPS网络。

按一下AP上的WPS按键,WPS开始链接协商,片刻后WPS安全连接成功建立。

PIN

1.PIN(Internal Registra, 相对于AP而言):通过在路由器中输入客户端PIN码来实现WPS安全连接。

在WPS设置中,把状态设置为启用。

打开客户端WPS设置软件,选择在路由器中输入PIN的方式连接,同时软件上还会显示客户端当前的PIN码。

打开路由器界面,在WPS模式里选择PIN模式,然后输入客户端的PIN码, 点添加新设备,一会儿后,WPS安全连接成功建立。

2.PIN(External Registra, 相对于AP而言):通过输入AP的PIN码实现WPS安全连接。

在AP中,在WPS设置中,设置为启用。

记住AP的PIN码,然后打开客户端(无线网卡)WPS设置软件,选择以AP的PIN码来进行连接。

输入完PIN码后,点下一步,一会儿后,WPS安全连接成功建立。

Zookeeper

http://zookeeper.apache.org/

bin/zkServer.sh status

http://www.cnblogs.com/lpshou/archive/2013/06/14/3136904.html

http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/index.html

Jetty

Jetty是一个Java Servlet容器。官网:

https://www.eclipse.org/jetty/

它与Tomcat的差异在于:

1.Jetty是Eclipse基金会的项目,而Tomcat是Apache基金会的项目。

2.Jetty是轻量级的Web Server,系统开销小,而Tomcat是重量级的Web Server,功能更强大。

3.启动方式不同。Jetty一般是嵌入Java程序中,在程序启动之后,再启动Jetty。而Tomcat是首先启动自己作为后台服务,然后再加载功能性的应用。

参考:

https://github.com/jasonish/jetty-springmvc-jsp-template

一个Jetty+Spring MVC+JSP的demo。

Docker

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

官网:

https://www.docker.com/

下图显示了Docker和VM之间的差别:

这里写图片描述

参考:

http://blog.csdn.net/colorant/article/details/20608157

快速理解Docker

http://www.cnblogs.com/zhangmingcheng/p/5730070.html

Docker数据管理

https://mp.weixin.qq.com/s/E4wKaIddq8_jRVx9q08qtg

Docker入门

MongoDB

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。

官网:

https://www.mongodb.com/

安装:

https://docs.mongodb.com/getting-started/shell/tutorial/install-mongodb-on-ubuntu/

参考:

https://docs.mongodb.com/manual/reference/sql-comparison/

这里提供了MongoDB查询语法和SQL查询之间的对应关系表。

https://docs.mongodb.com/manual/reference/sql-aggregation-comparison/

这是上面表格的高级版本,专门处理group by的情况。这种情况也叫做Aggregation。

Robomongo

Robomongo是一个开源的MongoDB的前端工具,基于Qt编写。官网:

https://robomongo.org/

WebSocket

在浏览器中通过http仅能实现单向的通信。AJAX通过轮询方式,达到全双工通信,但效率不高。

面对这种状况,HTML5定义了WebSocket协议(基于TCP),能更好的节省服务器资源和带宽并达到实时通讯。

浏览器请求

GET /webfin/websocket/ HTTP/1.1  Host: localhost  Upgrade: websocket Connection: Upgrade  Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==  Origin: http://www.sohu.com  Sec-WebSocket-Version: 13

服务器回应

HTTP/1.1 101 Switching Protocols  Upgrade: websocket  Connection: Upgrade  Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=
原创粉丝点击