0%

分布式组件导论

课程介绍

web服务是中间件的自然演化和企业平台整合的结果,他们想把www,英特网和社会全球化整合为一体,尤其在经济层面。

我们本次课程要回答的问题是:什么是web服务,web服务如今能做什么

课程目标:

  • 理解web服务
    • 为了能理解web服务,我们需要后退一步去看看分布式信息系统在过去十几年中变化的历史。
  • 把web服务应用化
    • 我们将回顾如今基本的web服务技术,并且详细讨论SOAP,UDDI,WSDL,SOA,BPEL
    • 我们也将探讨这些规格如今可以做什么,他们缺失了什么导致他们不能成为有效的工具投入商用
    • 课程目的旨在培养一种对当今web service技术和可能性的批判思维。
阅读全文 »

老君曰:大道无形,生育天地;大道无情,运行日月;大道无名,长养万物;吾不知其名,强名曰道。夫道者:有清有浊,有动有静;天清地浊,天动地静。男清女浊,男动女静。降本流末,而生万物。清者浊之源,动者静之基。人能常清静,天地悉皆归。

夫人神好清,而心扰之;人心好静,而欲牵之。常能遣其欲,而心自静,澄其心,而神自清。自然六欲不生,三毒消灭。所以不能者,为心未澄,欲未遣也。能遣之者,内观其心,心无其心;外观其形,形无其形;远观其物,物无其物。三者既悟,唯见於空;观空亦空,空无所空;所空既无,无无亦无;无无既无,湛然常寂;寂无所寂,欲岂能生?欲既不生,即是真静。真常应物,真常得性;常应常静,常清静矣。如此清静,渐入真道;既入真道,名为得道,虽名得道,实无所得;为化众生,名为得道;能悟之者,可传圣道。

阅读全文 »

本文介绍在linux下实现一个字符小游戏贪吃蛇的过程,游戏纯C++编写,服务器使用chrono定时器做帧同步,支持所有类unix系统的select函数做非阻塞IO,采用TCP socket通信,协议部分采用protobuf二进制流;客户端使用curses字符界面库。

服务器

服务器实现所有逻辑,服务器只接受客户端的操作(包括上下左右四个方向),服务器的几个主要类为server,snake,zone,time分别用于表示一个房间,蛇,战场,计时器。每一局游戏开始,会实例化一个server,监听一个端口,创建一个游戏房间等待玩家接入,这里使用阻塞IOaccept(),需要等加入的玩家达到人数才开始游戏。

就绪后,初始化战场,一个房间对应一局比赛,一个战场。zone类给n个接入的玩家随机分配初始位置。一个战场中包含n个snake信息,snake中存了蛇的长度,以链表结构存储蛇的节点便于头尾的增删。snake中保存蛇的移动方向,当每次用户改变蛇的方向时都会改变方向变量,即使接下来不输入也会继续运动。snake中封装了各种移动方法和判定方法,实现吃事物,死亡,复活等操作。

阅读全文 »

创建一个线程默认的状态是joinable, 如果一个线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收(退出状态码),所以创建线程者应该pthread_join()来等待线程运行结束,并可得到线程的退出代码,回收其资源(类似于wait(),waitpid())

但是调用pthread_join(pthread_id)后,如果该线程没有运行结束,调用者会被阻塞,在有些情况下我们并不希望如此,比如在Web服务器中当主线程为每个新来的链接创建一个子线程进行处理的时候,主线程并不希望因为调用pthread_join()而阻塞(因为还要继续处理之后到来的链接),这时可以在子线程中加入代码pthread_detach(pthread_self()),或者父线程调用pthread_detach(thread_id)(非阻塞,可立即返回),这将该子线程的状态设置为detached,则该线程运行结束后会自动释放所有资源。

阅读全文 »

2022.6 本文对于现在的Raspberry Pi OS已经不适用,移步官方文档

之前尝试了树莓派用作无限AP的教程,大多都只能获得ipv4地址,本文参考一篇教程,可以让树莓派给接入设备分配ipv6地址

原文链接:How to use your Raspberry Pi as a wireless access point

环境:原生Raspbian

安装和更新Raspbian

因为hostapddnsmasq对依赖的版本要求很高,需要先更新系统:

sudo apt-get update
sudo apt-get upgrade

更新后可能依然提示依赖版本过低,所以最好先sudo reboot
阅读全文 »