4层网络OSI模型

7层OSI模型:

  1. 应用层(Application Layer)

    HTTP, HTTPS, FTP,Telnet, SSH, SMTP, POP3等

  2. 表示层(Presentation Layer)

    把数据转化为能与接收者的系统割视兼容并适合传输的格式

  3. 会话层(Session Layer)

    负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接

  4. 传输层(Transport Layer)

    把传输表头(TH)加至数据形成数据包。传输表头包含了所使用的协议等发送信息。例如:传输控制协议(TCP)等

  5. 网络层(Network Layer)

    决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成分组。网络表头包含了网络资料。例如:互联网协议(IP)等

  6. 数据链路层(Data Link Layer)

    负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成信息框(Data Frame 数据帧)。数据链表头(DLH)是包含了物理地址和错误侦测以及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GTRS)等

    分为两个子层:逻辑链路控制(logical link control, LLC)子层和介质访问控制(Media access control, MAC)子层

  7. 物理层(Physical Layer)

    在局部局域网上发送数据帧(Data Frame),它负责管理电脑通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机接口卡等。

阅读全文 »

# celery 找不到任务

from celery import Celery
import os


os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'yourproject.settings')

app = Celery('yourproject')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=False)

如果使用了上述方法还是没有任务,可能是代码错误,但是没有提示。

可以强制查找任务

app = Celery('bdzhserver', include=['your_module.tasks'])

反射

go语言提供了一种机制,能够在运行时更新变量和检查他们的值、调用他们的方法和他们支持的内在操作,而不需要在编译的时候就知道这些变量的具体类型。这种机制被称作反射

阅读全文 »

包和工具

包简介

  • 每个包一般都定义了一个不同的名字空间用于它内部的每个标识符的访问
  • 每个包还通过控制包内名字的可见性和是否导出来实现封装特性
  • 当我们修改了一个源文件,我们必须重新编译该源文件对应的包和所有依赖该包的其他包
阅读全文 »

使用共享变量实现并发

竞态

竞态是指程序在多个goruntine交叉执行操作时,没有给出正确的结果。

三种避免数据竞态的方法:

  • 不要修改变量
  • 避免从多个goruntine访问同一变量
  • 允许多个goruntine访问同一变量,但同一时间只有一个goruntine可以访问。这种叫作互斥机制。
阅读全文 »

接口

接口即约定

接口类型

一个接口类型定义了一套方法,如果一个具体类型要实现该接口,那么必须实现接口类型定义中的所有方法。

例如:

package io

type Reader interface {
Read(p []byte) (n int, err error)
}

type Closer interface {
Close() error
}

type ReadWriter interface {
Reader
Writer
}

type ReadWriterCloser interface {
Reader
Writer
Closer
}
阅读全文 »

方法

方法声明

方法的声明和普通函数的声明类似,只是在函数名字的前面多了一个参数。这个参数把这个方法绑定到了这个参数对应的类型上。

示例:

package geometry

import "math"

type Point struct{X, Y float64}

// 普通的函数
func Distance(p, q Point) float64 {
return math.Hypot(q.X-p.X, q.Y-p.Y)
}

// Porint类型的方法
func (p Point) Distance(q Point) float64 {
return math.Hypot(q.X-p.X, q.Y-p.Y)
}

附加参数p成为方法的的接收者.

阅读全文 »
0%