day40

day40   epoll和数据库
 
 
阻塞的真正的原因
 
 
1.第一步需要给每一个socket的等待队列中添加进程信息
2.唤醒进程后,进程必须遍历所有socket,才能知道哪些socket有数据
3.还要遍历所有socket,将进程从等待队列中删除
上述操作,会大量消耗系统资源,必须限制同时处理的socket数量
 
 
select处理方式比较直接简洁,在任何平台上都有对应的实现,都能用
poll是对select的改造,但是不完善
 
epoll如何解决上述问题
epoll只有linux提供
 
解决问题
1.避免频繁操作等待队列
2.避免遍历所有socket
 
 
 
 
register 和unregister
 
 
 
epoll的执行过程
 
 
 
客户端代码
#coding:utf-8
#客户端
#创建客户端socket对象
import socket
clientsocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#服务端IP地址和端口号元组
server_address = ('127.0.0.1',1688)
#客户端连接指定的IP地址和端口号
clientsocket.connect(server_address)
 
while True:
    #输入数据
    data = raw_input('please input:')
    if data == "q":
        break
    if not data:
      continue
    #客户端发送数据
    clientsocket.send(data.encode("utf-8"))
    #客户端接收数据
    server_data = clientsocket.recv(1024)
    print ('客户端收到的数据:',server_data)
#关闭客户端socket
clientsocket.close()
 
 
 
服务器代码
 
# coding:utf-8
import socket, select
 
server = socket.socket()
server.bind(("127.0.0.1", 1688))
server.listen(5)
 
msgs = []
 
 
fd_socket = {server.fileno(): server}
epoll = select.epoll()
# 注册服务器的 写就绪
epoll.register(server.fileno(), select.EPOLLIN)
 
while True:
    for fd, event in epoll.poll():
        sock = fd_socket[fd]
        print(fd, event)
        # 返回的是文件描述符 需要获取对应socket
        if sock == server:  # 如果是服务器 就接受请求
            client, addr = server.accept()
            # 注册客户端写就绪
            epoll.register(client.fileno(), select.EPOLLIN)
            # 添加对应关系
            fd_socket[client.fileno()] = client
 
        # 读就绪
        elif event == select.EPOLLIN:
            data = sock.recv(2018)
            if not data:
                # 注销事件
                epoll.unregister(fd)
                # 关闭socket
                sock.close()
                # 删除socket对应关系
                del fd_socket[fd]
                 print(" somebody fuck out...")
                continue
 
            print(data.decode("utf-8"))
            # 读完数据 需要把数据发回去所以接下来更改为写就绪=事件
            epoll.modify(fd, select.EPOLLOUT)
            #记录数据
            msgs.append((sock,data.upper()))
        elif event == select.EPOLLOUT:
            for item in msgs[:]:
                if item[0] == sock:
                    sock.send(item[1])
                    msgs.remove(item)
            # 切换关注事件为写就绪
            epoll.modify(fd,select.EPOLLIN)
 
 
#####数据库
数据库本质是一套CS结构的TCP程序,客户端连接到服务器,向服务器发送指令,完成数据的操作
 
数据库与文件系统的对应关系
一个数据项name = jerry本质是文件中某一行的一部分数据
一条记录:jerry,18,man本质是文件里的一行数据
一张表:本质是一个文件
数据库:本质是文件夹
DBMS:数据库的管理系统,数据库的服务端程度
 
 
 
 
修改管理员密码
windows
启动服务:net start mysql
 
 
1.知道密码
mysqladmin -uroot -p旧密码 password新密码
2.不知道原始密码的情况
 
        跳过授权表:在启动服务器时候,指定让其忽略授权信息.
        启动mysql的时候,跳过授权表
        mysqld --skip -grant -tables
        改密码
        update mysql.user set password =password("123") where User="root" and host="localhost"
 
 
 
 
# 数据库相关概念  非常重要
 
数据库本质就是一套CS结构的TCP程序,
 
客户端连接到服务器 向服务器发送指令,来完成数据的操作  
 
 
 
# 数据库 与 文件系统的对应关系  非常重要
 
一个数据项   name = jerry          本质是文件中某一行的 一部分数据
 
一条记录  jerry,18,man          本质是文件里的一行数据
 
一张表                                  本质是一个文件
 
数据库                          文件夹  
 
DBMS  DataBaseManagerSystem      数据库管理系统   数据库的服务器端程序
 
数据库服务器                     运行有DBMS的计算机  
 
 
 
 
 
## 安装方式:    掌握
 
1.下载解压包  
 
2.解压到某个目录下
 
3.添加环境变量
 
    将bin所在的完整路径 copy 添加系统的path中  
 
4.作为服务器 应该自启动mysql服务器   需要制系统服务
 
    mysqld --install    运行输入services 查看是是否成功
 
     删除服务 sc delete mysql    如果需要重装的话...
 
    启动服务  net start mysql
 
    停止服务 net stop mysql
 
# 连接服务器的指令  必要掌握
 
本质是TCP程序,必须指定ip和端口 ,如果服务器就运行在本机上 可以省略ip  如果端口没改过 也可以省略端口  
 
完整的写法 :
 
```python
mysql -hip -P端口 -u用户名  -p密码  
实例: mysql -uroot -p
    
mysql 5.6 默认是没有密码的
```
 
 
 
## 修改管理员密码   了解
 
1.如果知道原始密码  可以使用mysqladmin 这个工具
 
```python
mysqladmin -p旧密码  -u用户名 password 新密码
实例: mysqladmin -uroot -p  password 123
```
 
2.不知道原始密码的情况   
 
    删除密码文件,会删除所有授权信息   
 
    跳过授权表 我们可以在启动服务器时  指定让其忽略授权信息
 
    1.先关闭mysql服务器  直接在终端执行 mysqld --skip-grant-tables
 
    2.无密码登录root账户
 
    3.执行更新语句  
 
        update mysql.user set password = password("123") where user="root" and host = "localhost";
 
 
 
 
 
posted @ 2019-06-11 21:15  轩辕12  阅读(155)  评论(0编辑  收藏  举报