解决使用代理后WSL2、docker报错的问题
问题描述
使用代理后,因为sock端口冲突的问题,WSL2会报参考的对象类型不支持尝试的操作错误,docker客户端启动会显示乱码,无法启动。
产生的原因
代理软件和wsl2的sock端口冲突,使用netsh winsock reset重置修复。
Proxifer开发人员解释如下:
如果Winsock LSP DLL被加载到其进程中,则wsl.exe将显示此错误。最简单的解决方案是对wsl.exe使用WSCSetApplicationCategory WinAPI调用来防止这种情况。在后台,该调用在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\AppId_Catalog中为wsl.exe创建一个条目。
这将告诉Windows不要将LSP DLL加载到wsl.exe进程中。
临时解决方法
在管理员的权限下运行下述命令:
1netsh winsock reset
然后重启电脑即可,但是这种办法会导致代理无法使用。
永久解决办法
下载nolsp软件,然后在nolsp软件目录下用管理员权限 ...
解决raw.githubusercontent.com无法访问的问题
解决raw.githubusercontent.com无法访问的问题
一般情况下,github.com已经被官方节流,正常的访问速度非常慢。我们可以用一些方法来进行加速,同时raw.githubusercontent.com也是可以正常访问的。
就在刚刚,要在raw.githubusercontent.com下一个文件,发现这个网站无法访问了!!!!
这不能忍啊,想办法解决一下吧。
首先,遇事不决先ping一下,出现如下错误:
1Ping 请求找不到主机 raw.githubusercontent.com。请检查该名称,然后重试。
这就是这个网址直接没法解析了啊。
然后考虑改hosts给它强行掰回来。这就需要知道raw.githubusercontent.com解析的真正IP。
在网址https://www.ipaddress.com/上查询raw.githubusercontent.com的解析IP:
1185.199.108.133
然后替换hosts文件就可以了。
windows环境下,寻找路径C:\Windows\System32\drivers\etc,用记事本打开hosts ...
windows 保留端口的相关问题
解决报错“此端口已被占用”问题
在 Windows 系统使用一些软件的时候,经常会弹出“此端口已被占用”的报错,因而将这个问题在这里梳理一下。
这个问题一般来说有两个原因,一个是这个端口已经被某个应用使用,另一个原因是这个端口被系统保留了。
问题排查
首先,检查端口占用情况:
12# powershellnetstat -ano | findstr "端口号"
如果有结果,就是被其他应用占用,会显示对应的 PID;否则的话,考虑是被系统保留了。
被其他应用占用
如果是被其他应用占用,直接 kill 就好:
1taskkill /f /t /im PID
被系统保留
造成系统保留端口的原因比较多,其中一个就是 hyper-v 虚拟机开启或者打开了 WSL2 的原因。
首先,查看系统的保留端口列表:
12345678910111213141516171819202122232425262728293031# 查看系统默认端口占用访问netsh int ipv4 show dynamicport tcp # 结果为: 协议 tcp 动态端口范围-------------- ...
VScode+LaTex+双向搜索的配置
VScode+LaTex+双向搜索的配置
在写论文的时候需要用到 Latex , 但是其自带的编辑器非常丑,而且并不好用,所以尝试使用 VScode 来进行 Latex 编辑。
下载安装软件
下载 Latex 相关软件
在 官网 下载安装Tex Live,这一步用时比较长,最好使用国内的镜像下载。
下载 VScode
在 [官网](Download Visual Studio Code - Mac, Linux, Windows) 下载安装对应操作系统的VScode,按使用习惯可以选择是否安装中文语言的扩展。
安装VS code的Latex插件。
下载 Sumatra PDF
在 官网 下载安装 Sumatra PDF。
配置 VScode
在VScode界面中使用快捷键【Ctrl + Shift +P】打开命令框,输入settings选择 首选项:打开设置(JSON),打开配置文件,输入如下配置信息:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505 ...
Git、Bash、CMD和Powershell的代理配置
Git、Bash、CMD和Powershell的代理配置
Git设置和取消代理
HTTP/HTTPS代理
1234567git config --global https.proxy http://127.0.0.1:1080git config --global https.proxy https://127.0.0.1:1080git config --global --unset http.proxygit config --global --unset https.proxy
SOCKS5代理
1234567git config --global http.proxy socks5://127.0.0.1:1080git config --global https.proxy socks5://127.0.0.1:1805git config --global --unset http.proxygit config --global --unset https.proxy
Bash设置和取消代理
HTTP/HTTPS代理
1234567export http_pr ...
用C++实现一个简易的线程池
用C++实现一个简易的线程池
什么是线程池
线程池是一项程序开发人员以简单和有效的方式去利用现代处理器的并发性来榨取处理器性能的方法。简而言之,线程池通过对线程的有效管理,提高了CPU的并发性。一般的流程是,提交一项任务后,线程池分配线程在不阻塞主线程的情况下完成这项工作。并且,线程池并不是每提交一项任务初始化一次,而是一次初始化,保持非活跃状态直至一些任务完成。这样的话,也减小了系统开销。
线程池的原理示意图如下:
什么情况下需要使用线程池
有这样一个项目:公司需要为某某超市做一套对每天进入超市的顾客做用户画像的系统。基本流程是:对海康摄像头拍摄到的每一帧画面做人脸检测,然后对每个人脸进行年龄、性别和特征点的计算,最后将结果post到服务端进行后续处理。大家都知道人脸相关算法耗时是较高的,如果所有计算任务都放在主线程进行,那么势必会阻塞主线程的处理流程,无法做到实时处理。使用多线程技术是大家自然而然想到的方案,对每一帧都创建一个新的线程来做这系列的处理是否合理呢?相信大家都知道,线程的创建和销毁都是需要时间的,在上述的场景中必然会频繁的创建和销毁线程,这样的开销相信是不能接受的,此 ...
WebServer项目——webserver详解
WebServer项目——webserver详解
webserver介绍
这个webserver类是对整个web服务器的抽象,基于HTTPconnection类、timer类、epoller类、threadpool类实现一个完整的高性能web服务器的所有功能。
需要满足的功能有:
初始化服务器,为HTTP的连接做好准备;
处理每一个HTTP连接;
用定时器给每一个HTTP连接定时,并且处理掉过期的连接;
运用IO多路复用技术提升IO性能;
运用线程池技术提升服务器性能;
webserver的逻辑
首先是进行服务器的初始化,进行各种参数设置。其中包括了事件模式的初始化、socket连接的建立过程,主要用到了以下两个函数:
12bool initSocket_(); void initEventMode_(int trigMode);
在初始化socket的过程中,将listenFd_描述符也加入epoll进行监视。这样的话,当监听的listenFd(socketFd)有新连接的时候,就会发来一个可读信号。同时,也将监听socket的行为(是否有新的连接)和监听每一个HTTP连接的行为 ...
WebServer项目——timer详解
WebServer项目——timer详解
定时器的介绍
为了提高Web服务器的效率,我们考虑给每一个HTTP连接加一个定时器。
定时器给每一个HTTP连接设置一个过期时间,然后我们定时清理超过过期时间的连接,会减少服务器的无效资源的耗费,提高服务器的运行效率。
我们还需要考虑一下如何管理和组织这些定时器。设置定时器的主要目的是为了清理过期连接,为了方便找到过期连接,首先考虑使用优先队列,按过期时间排序,让过期的排在前面就可以了。但是这样的话,虽然处理过期连接方便了,当时没法更新一个连接的过期时间。
最后,选择一个折中的方法。用vector容器存储定时器,然后在这之上实现堆结构,这样各个操作的代价就得到了相对均衡。
定时器的组成
定时器结点
为了实现定时器的功能,我们首先需要辨别每一个HTTP连接,每一个HTTP连接会有一个独有的描述符(socket),我们可以用这个描述符来标记这个连接,记为id。同时,我们还需要设置每一个HTTP连接的过期时间。
为了后面处理过期连接的方便,我们给每一个定时器里面放置一个回调函数,用来关闭过期连接。
为了便于定时器结点的比较,主要是后续堆结构的实现方便 ...
WebServer项目——HTTPresponse详解
WebServer项目——HTTPresponse详解
HTTPresponse简介
这个类和HTTPrequest相反,是给相应的连接生成相应报文的。HTTPrequest是解析请求行,请求头和数据体,那么HTTPresponse就是生成请求行,请求头和数据体。
HTTPresponse的组成
所需变量和自定义的数据结构
首先,我们需要一个变量code_来代表HTTP的状态。
在HTTPrequest中解析到的路径信息是相对路径,我们还需要补全,所以需要一个变量path_代表解析得到的路径,一个变量srcDir_表示根目录,除此之外,我们还需要一个哈希表提供4XX状态码到响应文件路径的映射。
我们在实现所需函数的过程中,需要知道HTTP连接是否处于KeepAlive状态,所以用一个变量isKeepAlive_表示。
由于使用了共享内存,所以也需要变量和数据结构指示相关信息:
12char* mmFile_;struct stat mmFileStat_;
所以,总结如下:
123456789101112int code_;bool isKeepAlive_;std::string ...
WebServer项目——HTTPrequest详解
WebServer项目——HTTPrequest详解
HTTPrequest简介
这个类主要的功能是解析HTTP的请求信息。
HTTP的请求包括:请求行(request line)、请求头部(header)、空行 和 请求数据 四个部分组成。
抓包的request结构如下:
1234567GET /mix/76.html?name=kelvin&password=123456 HTTP/1.1Host: www.fishbay.cnUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Encoding: gzip, deflate, sdc ...