coTurn是一个开源的STUN和TURN及ICE服务项目,只是不支持Windows。
为了在window平台上使用coTurn源码,需要在windows平台下安装Cygwin环境,并编译coTurn源码,使其可以运行在windows平台上。

步骤:

1、安装Cygwin,地址:https://cygwin.com/install.html,按照其说明进行安装。参照说明地址:https://cygwin.com/cygwin-ug-net/cygwin-ug-net.html

   安装过程中选择的镜像源地址,为了更加快速,使用http://mirrors.163.com/cygwin/

2、下载coTurn源码。目前Release最新版本的地址为:https://codeload.github.com/coturn/coturn/zip/4.5.0.4

3、编译:

XII. MS Windows and Cygwin support

Currently, this project cannot be compiled under MS Windows.

As the project is using fairly straightforward *NIX API, it is supported
under Cygwin environment in MS Windows.

One note for Cygwin users: we recommended libevent2 installation from the cygwin
"ports" site: http://sourceware.org/cygwinports/ . You will have to install
libevent2 runtime and libevent-devel packages. "Manual" libevent2 compilation
and installation in Cygwin is not recommended and does not garantee a good
outcome.

编译过程简单记录:

①生成Makefile文件

CC=gcc ./configure
 Dev@Dev-PC /bin/coturn-4.5.0.4
$ CC=gcc ./configure
install 是 /usr/bin/install
pkill 是 /usr/bin/pkill
sqlite3 是 /usr/bin/sqlite3
Use TMP dir /var/tmp
Compiler: gcc
Library option -lsocket cannot be used
CYGWIN ?
Library option -lwldap64 cannot be used
Library option -lnsl cannot be used
Sockets code is fine: no sin_len field present
Ignore IP_RECVERR
Crypto SSL lib found.
SSL lib found.
Libevent2 development found.
Libevent2 runtime found.
Libevent2 runtime 'extra' found.
Libevent2 openssl found.
Libevent2 pthreads found.
SQLite library found.
SQLite development found.
PostgreSQL found.
MySQL found. MONGODB DEVELOPMENT LIBRARIES (libmongoc-1.0 and libbson-1.0) AND/OR HEADER (mongoc.h)
ARE NOT INSTALLED PROPERLY ON THIS SYSTEM.
THAT'S OK BUT THE TURN SERVER IS BUILDING WITHOUT MONGODB SUPPORT. HIREDIS DEVELOPMENT LIBRARY (libhiredis.*) AND/OR HEADERS (hiredis/*.h)
ARE NOT INSTALLED PROPERLY ON THIS SYSTEM.
THAT'S OK BUT THE TURN SERVER IS BUILDING WITHOUT REDIS SUPPORT. PREFIX=/usr/local LOCALSTATEDIR=/usr/local/var OSLIBS= -L/usr/local/lib/ -L/usr/local/lib/ -lrt -lwldap32 -lintl -lresolv -lcrypto -lssl -levent_core -levent_extra -levent_openssl -levent_pthreads -lsqlite3 -Wl,-rpath,/usr/local/lib/ -Wl,-rpath,/usr/local/lib/ -Wl,-rpath,/usr/lib/postgresql -Wl,-rpath,/usr/lib/mysql -Wl,-rpath,/usr/local/lib DBLIBS= -lsqlite3 -L/usr/local/lib/ -L/usr/local/lib/ -lrt -lwldap32 -lintl -lresolv -lcrypto -lssl -levent_core -levent_extra -levent_openssl -levent_pthreads -lsqlite3 -L/usr/lib/postgresql -lpq -L/usr/local/lib/ -L/usr/local/lib/ -lrt -lwldap32 -lintl -lresolv -lcrypto -lssl -levent_core -levent_extra -levent_openssl -levent_pthreads -lsqlite3 -L/usr/lib/mysql -lmysqlclient OSCFLAGS=-g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -I/usr/local/include -I/usr/local/include/ -I/usr/local/include -DTURN_HAS_DAEMON -DINSTALL_PREFIX=/usr/local -DTURNDB=/usr/local/var/db/turndb DBCFLAGS= -I/usr/local/pgsql/include -I/usr/local/include/pgsql/ -I/usr/local/include/postgres/ -I/usr/local/postgres/include/ -I/usr/local/include/postgresql/ -I/usr/local/postgresql/include/ -I/usr/local/pgsql/include -I/usr/local/include/pgsql/ -I/usr/local/include/postgres/ -I/usr/local/postgres/include/ -I/usr/local/include/postgresql/ -I/usr/local/postgresql/include/ -I/usr/pgsql/include -I/usr/include/pgsql/ -I/usr/include/postgres/ -I/usr/postgres/include/ -I/usr/include/postgresql/ -I/usr/postgresql/include/ -I/usr/local/mysql/include -I/usr/local/include/mysql/ -I/usr/local/mysql/include -I/usr/local/include/mysql/ -I/usr/mysql/include -I/usr/include/mysql/
Makefile created: success.

②编译make

Dev@Dev-PC /bin/coturn-4.5.0.4
$ make
mkdir -p build/obj
gcc -g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -I/usr/local/include -I/usr/local/include/ -I/usr/local/include -DTURN_HAS_DAEMON -DINSTALL_PREFIX=/usr/local -DTURNDB=/usr/local/var/db/turndb -Isrc -Isrc/apps/common -Isrc/server -Isrc/client -Isrc/client++ -I/usr/local/include/ -I/usr/local/include/ -c src/client/ns_turn_ioaddr.c -o build/obj/ns_turn_ioaddr.o
mkdir -p build/obj
gcc -g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -I/usr/local/include -I/usr/local/include/ -I/usr/local/include -DTURN_HAS_DAEMON -DINSTALL_PREFIX=/usr/local -DTURNDB=/usr/local/var/db/turndb -Isrc -Isrc/apps/common -Isrc/server -Isrc/client -Isrc/client++ -I/usr/local/include/ -I/usr/local/include/ -c src/client/ns_turn_msg_addr.c -o build/obj/ns_turn_msg_addr.o
mkdir -p build/obj
gcc -g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -I/usr/local/include -I/usr/local/include/ -I/usr/local/include -DTURN_HAS_DAEMON -DINSTALL_PREFIX=/usr/local -DTURNDB=/usr/local/var/db/turndb -Isrc -Isrc/apps/common -Isrc/server -Isrc/client -Isrc/client++ -I/usr/local/include/ -I/usr/local/include/ -c src/client/ns_turn_msg.c -o build/obj/ns_turn_msg.o
mkdir -p lib
ar -r lib/libturnclient.a build/obj/ns_turn_ioaddr.o build/obj/ns_turn_msg_addr.o build/obj/ns_turn_msg.o
ar: 正在创建 lib/libturnclient.a
pwd
/bin/coturn-4.5.0.4
mkdir -p bin
gcc -g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -I/usr/local/include -I/usr/local/include/ -I/usr/local/include -DTURN_HAS_DAEMON -DINSTALL_PREFIX=/usr/local -DTURNDB=/usr/local/var/db/turndb -Isrc -Isrc/apps/common -Isrc/server -Isrc/client -Isrc/client++ -I/usr/local/include/ -I/usr/local/include/ src/apps/stunclient/stunclient.c src/apps/common/apputils.c src/apps/common/ns_turn_utils.c src/apps/common/stun_buffer.c -o bin/turnutils_stunclient -Llib -lturnclient -Llib -L/usr/local/lib/ -L/usr/local/lib/ -lrt -lwldap32 -lintl -lresolv -lcrypto -lssl -levent_core -levent_extra -levent_openssl -levent_pthreads -lsqlite3 -Wl,-rpath,/usr/local/lib/ -Wl,-rpath,/usr/local/lib/ -Wl,-rpath,/usr/lib/postgresql -Wl,-rpath,/usr/lib/mysql -Wl,-rpath,/usr/local/lib
pwd
/bin/coturn-4.5.0.4
mkdir -p bin
gcc -g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -I/usr/local/include -I/usr/local/include/ -I/usr/local/include -DTURN_HAS_DAEMON -DINSTALL_PREFIX=/usr/local -DTURNDB=/usr/local/var/db/turndb -Isrc -Isrc/apps/common -Isrc/server -Isrc/client -Isrc/client++ -I/usr/local/include/ -I/usr/local/include/ src/apps/rfc5769/rfc5769check.c src/apps/common/apputils.c src/apps/common/ns_turn_utils.c src/apps/common/stun_buffer.c -o bin/turnutils_rfc5769check -Llib -lturnclient -Llib -L/usr/local/lib/ -L/usr/local/lib/ -lrt -lwldap32 -lintl -lresolv -lcrypto -lssl -levent_core -levent_extra -levent_openssl -levent_pthreads -lsqlite3 -Wl,-rpath,/usr/local/lib/ -Wl,-rpath,/usr/local/lib/ -Wl,-rpath,/usr/lib/postgresql -Wl,-rpath,/usr/lib/mysql -Wl,-rpath,/usr/local/lib
mkdir -p bin
gcc -g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -I/usr/local/include -I/usr/local/include/ -I/usr/local/include -DTURN_HAS_DAEMON -DINSTALL_PREFIX=/usr/local -DTURNDB=/usr/local/var/db/turndb -Isrc -Isrc/apps/common -Isrc/server -Isrc/client -Isrc/client++ -I/usr/local/include/ -I/usr/local/include/ src/apps/uclient/uclient.c src/apps/uclient/startuclient.c src/apps/uclient/mainuclient.c src/apps/common/apputils.c src/apps/common/ns_turn_utils.c src/apps/common/stun_buffer.c -o bin/turnutils_uclient -Llib -lturnclient -Llib -L/usr/local/lib/ -L/usr/local/lib/ -lrt -lwldap32 -lintl -lresolv -lcrypto -lssl -levent_core -levent_extra -levent_openssl -levent_pthreads -lsqlite3 -Wl,-rpath,/usr/local/lib/ -Wl,-rpath,/usr/local/lib/ -Wl,-rpath,/usr/lib/postgresql -Wl,-rpath,/usr/lib/mysql -Wl,-rpath,/usr/local/lib
mkdir -p bin
rm -rf bin/turnadmin
gcc -g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -I/usr/local/include -I/usr/local/include/ -I/usr/local/include -DTURN_HAS_DAEMON -DINSTALL_PREFIX=/usr/local -DTURNDB=/usr/local/var/db/turndb -Isrc -Isrc/apps/common -Isrc/server -Isrc/client -Isrc/client++ -I/usr/local/include/ -I/usr/local/include/ -I/usr/local/pgsql/include -I/usr/local/include/pgsql/ -I/usr/local/include/postgres/ -I/usr/local/postgres/include/ -I/usr/local/include/postgresql/ -I/usr/local/postgresql/include/ -I/usr/local/pgsql/include -I/usr/local/include/pgsql/ -I/usr/local/include/postgres/ -I/usr/local/postgres/include/ -I/usr/local/include/postgresql/ -I/usr/local/postgresql/include/ -I/usr/pgsql/include -I/usr/include/pgsql/ -I/usr/include/postgres/ -I/usr/postgres/include/ -I/usr/include/postgresql/ -I/usr/postgresql/include/ -I/usr/local/mysql/include -I/usr/local/include/mysql/ -I/usr/local/mysql/include -I/usr/local/include/mysql/ -I/usr/mysql/include -I/usr/include/mysql/ -DTURN_NO_MONGO -DTURN_NO_HIREDIS src/apps/relay/ns_ioalib_engine_impl.c src/apps/relay/turn_ports.c src/apps/relay/http_server.c -Ilib src/apps/relay/mainrelay.c src/apps/relay/netengine.c src/apps/relay/libtelnet.c src/apps/relay/turn_admin_server.c src/apps/relay/userdb.c src/apps/relay/tls_listener.c src/apps/relay/dtls_listener.c src/apps/common/hiredis_libevent2.c src/apps/relay/dbdrivers/dbdriver.c src/apps/relay/dbdrivers/dbd_sqlite.c src/apps/relay/dbdrivers/dbd_pgsql.c src/apps/relay/dbdrivers/dbd_mysql.c src/apps/relay/dbdrivers/dbd_mongo.c src/apps/relay/dbdrivers/dbd_redis.c src/apps/common/apputils.c src/apps/common/ns_turn_utils.c src/apps/common/stun_buffer.c src/client/ns_turn_ioaddr.c src/client/ns_turn_msg_addr.c src/client/ns_turn_msg.c src/server/ns_turn_allocation.c src/server/ns_turn_maps_rtcp.c src/server/ns_turn_maps.c src/server/ns_turn_server.c -o bin/turnserver -lsqlite3 -L/usr/local/lib/ -L/usr/local/lib/ -lrt -lwldap32 -lintl -lresolv -lcrypto -lssl -levent_core -levent_extra -levent_openssl -levent_pthreads -lsqlite3 -L/usr/lib/postgresql -lpq -L/usr/local/lib/ -L/usr/local/lib/ -lrt -lwldap32 -lintl -lresolv -lcrypto -lssl -levent_core -levent_extra -levent_openssl -levent_pthreads -lsqlite3 -L/usr/lib/mysql -lmysqlclient -L/usr/local/lib/ -L/usr/local/lib/ -lrt -lwldap32 -lintl -lresolv -lcrypto -lssl -levent_core -levent_extra -levent_openssl -levent_pthreads -lsqlite3 -Wl,-rpath,/usr/local/lib/ -Wl,-rpath,/usr/local/lib/ -Wl,-rpath,/usr/lib/postgresql -Wl,-rpath,/usr/lib/mysql -Wl,-rpath,/usr/local/lib
cd bin; ln -s turnserver turnadmin
mkdir -p bin
gcc -g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -I/usr/local/include -I/usr/local/include/ -I/usr/local/include -DTURN_HAS_DAEMON -DINSTALL_PREFIX=/usr/local -DTURNDB=/usr/local/var/db/turndb -Isrc -Isrc/apps/common -Isrc/server -Isrc/client -Isrc/client++ -I/usr/local/include/ -I/usr/local/include/ src/apps/peer/mainudpserver.c src/apps/peer/udpserver.c src/apps/common/apputils.c src/apps/common/ns_turn_utils.c src/apps/common/stun_buffer.c -o bin/turnutils_peer -Llib -lturnclient -Llib -L/usr/local/lib/ -L/usr/local/lib/ -lrt -lwldap32 -lintl -lresolv -lcrypto -lssl -levent_core -levent_extra -levent_openssl -levent_pthreads -lsqlite3 -Wl,-rpath,/usr/local/lib/ -Wl,-rpath,/usr/local/lib/ -Wl,-rpath,/usr/lib/postgresql -Wl,-rpath,/usr/lib/mysql -Wl,-rpath,/usr/local/lib
rm -rf include
mkdir -p include/turn/client
cp -pf src/client/*.h include/turn/client/
cp -pf src/client++/*.h include/turn/client/
cp -pf src/ns_turn_defs.h include/turn/
install -d sqlite
rm -rf sqlite/turndb
sqlite3 sqlite/turndb < turndb/schema.sql

③make install

 Dev@Dev-PC /bin/coturn-4.5.0.4
$ make install
install -d /usr/local
install -d /usr/local/bin
install -d /usr/local/var/db
install -d /usr/local/man/man1
install -d /usr/local/etc
install -d /usr/local/lib
install -d /usr/local/share/examples/turnserver
install -d /usr/local/share/doc/turnserver
install -d /usr/local/share/turnserver
install -d /usr/local/include/turn
install bin/turnserver /usr/local/bin
install bin/turnadmin /usr/local/bin
install bin/turnutils_uclient /usr/local/bin
install bin/turnutils_peer /usr/local/bin
install bin/turnutils_stunclient /usr/local/bin
install man/man1/turnserver. /usr/local/man/man1/
install man/man1/turnadmin. /usr/local/man/man1/
install man/man1/turnutils. /usr/local/man/man1/
install man/man1/turnutils_uclient. /usr/local/man/man1/
install man/man1/turnutils_stunclient. /usr/local/man/man1/
install man/man1/turnutils_peer. /usr/local/man/man1/
install man/man1/coturn. /usr/local/man/man1/
install lib/libturnclient.a /usr/local/lib
install LICENSE /usr/local/share/doc/turnserver
install README.turnserver /usr/local/share/doc/turnserver
install README.turnadmin /usr/local/share/doc/turnserver
install README.turnutils /usr/local/share/doc/turnserver
install INSTALL /usr/local/share/doc/turnserver
install postinstall.txt /usr/local/share/doc/turnserver
install turndb/schema.sql /usr/local/share/doc/turnserver
install turndb/schema.sql /usr/local/share/turnserver
install turndb/schema.mongo.sh /usr/local/share/doc/turnserver
install turndb/schema.mongo.sh /usr/local/share/turnserver
install turndb/testredisdbsetup.sh /usr/local/share/turnserver
install turndb/testmongosetup.sh /usr/local/share/turnserver
install turndb/testsqldbsetup.sql /usr/local/share/turnserver
install turndb/schema.userdb.redis /usr/local/share/doc/turnserver
install turndb/schema.userdb.redis /usr/local/share/turnserver
install turndb/schema.stats.redis /usr/local/share/doc/turnserver
install turndb/schema.stats.redis /usr/local/share/turnserver
if [ -f sqlite/turndb ] ; then install sqlite/turndb /usr/local/var/db/turndb; fi
install examples/etc/turnserver.conf /usr/local/etc/turnserver.conf.default
cp -rpf examples/etc /usr/local/share/examples/turnserver
cp -rpf examples/scripts /usr/local/share/examples/turnserver
rm -rf /usr/local/share/examples/turnserver/scripts/rfc5769.sh
cp -rpf include/turn/client /usr/local/include/turn
install include/turn/ns_turn_defs.h /usr/local/include/turn
cat /usr/local/share/doc/turnserver/postinstall.txt
================================================================== ) If you system supports automatic start-up system daemon services,
the, to enable the turnserver as an automatically started system
service, you have to: a) Create and edit /etc/turnserver.conf or
/usr/local/etc/turnserver.conf .
Use /usr/local/etc/turnserver.conf.default as an example. b) For user accounts settings: set up SQLite or PostgreSQL or
MySQL or MongoDB or Redis database for user accounts.
Use /usr/local/share/turnserver/schema.sql as SQL database schema,
or use /usr/local/share/turnserver/schema.userdb.redis as Redis
database schema description and/or
/usr/local/share/turnserver/schema.stats.redis
as Redis status & statistics database schema description. If you are using SQLite, the default database location is in
/var/db/turndb or in /usr/local/var/db/turndb or in /var/lib/turn/turndb. c) add whatever is necessary to enable start-up daemon for the
/usr/local/bin/turnserver. ) If you do not want the turnserver to be a system service,
then you can start/stop it "manually", using the "turnserver"
executable with appropriate options (see the documentation). ) To create database schema, use schema in file
/usr/local/share/turnserver/schema.sql. ) For additional information, run: $ man turnserver
$ man turnadmin
$ man turnutils ==================================================================

下载tar.gz包的编译方法:

 $ tar vfzx coturn-4.5.0.4.tar.gz
$ cd coturn-4.5.0.4/ $ ./configure Dev@Dev-PC /home/coturn-4.5.0.4
$ make $ make install

4、配置

在bin目录下生成六个可执行文件

turnadmin  turnutils_peer.exe  turnutils_stunclient.exe  turnserver.exe  turnutils_rfc5769check.exe  turnutils_uclient.exe

turnserver.exe 就是我们需要的服务器.

turnadmin 用来管理账户.

turnutils_stunclient.exe 用于测试stun服务

turnutils_uclient.exe 用于测试turn服务. 模拟多个UDP,TCP,TLS or DTLS 类型的客户端

example 目录主要是示范如何配置和使用turn. 包含一些测试用例.

example/etc 下是pem证书和conf配置文件

example/var/db 下是sqlite的db库. 用于示范数据库的格式.

coturn 支持三种配置. 命令行, conf文件和数据库.

数据库支持sqlite, mysql, postgresql, MongoDB, redis.目前测试的Cygwin环境下编译的coTurn不支持MongoDB和redis,因为暂时用不到,所以也就没有查找如何才能编译支持到上述数据库

更具体的说明可以看源码目录下的README.turnserver README.turnadmin README.turnutils

examples\scripts 下一些测试用例:

loadbalance 示范如何进行负载均衡.  设置一个master turn server 然后配置若干个slave turn server.

longtermsecure 示范如何使用long-term 验证

longtermsecuredb 与 longtermsecure 类似, 不过是从数据库配置

shorttermsecure 示范如何使用short-term验证.

restapi 示范了web方面的使用.

stun 定义了两种验证方式.

Long-Term Credential
Short-Term Credential

具体可以参考stun标准 http://tools.ietf.org/html/rfc5389#section-15.4

若用于WebRTC,必须使用long-term

简单配置:

turnserver -o -a -f -v --mobility -m 10 --max-bps=100000 --min-port=32355 --max-port=65535 --user=ling:ling1234 --user=ling2:ling1234 -r demo

-m 10 表示启动十个relay线程.

当TURN Server用于WebRTC时,必须使用long-term credential mechanism,  即指定 -a 或者 --lt-cred-mech

--max-bps=100000 限制最大速度为100KB/s.

添加了两个用户ling 和ling2.

可以直接使用turnutils_uclient -u ling -w ling1234 来测试. turnutils_uclient 有很多参数可以配置的.

1
2
3
4
5
webrtc::PeerConnectionInterface::IceServer turnServer;
turnServer.uri = "turn:ip";
turnServer.username = "ling";
turnServer.password = "ling1234";
servers.push_back(turnServer);

  

c++ webrtc中可以这样配置turn. web/android/ios 也是类似的.

如果从安全性方面考虑. 可以为账户生成key, 这样就可以直接通过key登录. 而不需要提供密码.

key 通过turnadmin生成, 需要(username, password, realm) . realm是启动turn server时-r 参数指定的.

例如这样:

1
2
turnadmin -k -u ling -p ling1234 -r demo
0xccba8f3a6a025a38eb4a0e795fc92705

参考原文:

https://www.webrtc-experiment.com/docs/TURN-server-installation-guide.html#windows

https://www.slideshare.net/amiteshawa/web-rtc-media-stra

其它:

http://www.cppblog.com/tianhongye/archive/2015/01/15/209524.html

http://www.cnblogs.com/lingdhox/p/4209659.html

http://www.ietf.org/proceedings/87/slides/slides-87-behave-10.pdf
TURN REST Server API ,这个PDF 描述了 turn服务器和客户端的交互流程.

coTurn 运行在Windows平台的方法及服务与客户端运行交互流程和原理的更多相关文章

  1. coturn编译运行在Windows平台

    turn 编译安装到Windows平台 https://www.webrtc-experiment.com/docs/TURN-server-installation-guide.html#windo ...

  2. mongoDB 在windows平台下安装成系统服务

    1,用如截图所示命令将mongoDB安装成windows系统服务,byRuiy Tips[Note,logpath and dbpath根据你命令行指导的路径,这些目录一定要已经创建]

  3. 【Nginx】Windows平台下配置Nginx服务实现负载均衡

    前言:废话不多说了,直接上步骤. 系统环境:win10 测试用的开发环境和服务类型:VS2022 + DotNet 6 + WebApi 1.本地先创建一个webapi项目,用于测试使用. 2.新建一 ...

  4. Windows平台开发Mapreduce程序远程调用运行在Hadoop集群—Yarn调度引擎异常

    共享原因:虽然用一篇博文写问题感觉有点奢侈,但是搜索百度,相关文章太少了,苦苦探寻日志才找到解决方案. 遇到问题:在windows平台上开发的mapreduce程序,运行迟迟没有结果. Mapredu ...

  5. windows平台的游戏运行库

    每一个都在PC上玩过游戏的人,都知道要安装一些必备的游戏运行库,游戏才能运行,这里指的PC是特指Windows操作系统平台.一般来说最常见的运行库是DirectX.Microsoft Visual C ...

  6. 大数据应用之Windows平台Hbase客户端Eclipse开发环境搭建

    大数据应用之Windows平台Hbase客户端Eclipse开发环境搭建 大数据应用之Windows平台Hbase客户端Eclipse环境搭建-Java版 作者:张子良 版权所有,转载请注明出处 引子 ...

  7. Windows平台搭建Git服务教程详解

    引言 软件企业的核心就是代码,如何确保代码的安全?如何在团队开发中协同工作?为解决这些问题,我们需要采用相应的管理工具来满足管理的需求.探长从最初的VSS.SVN.TFS到现在的Git存储一路走来,感 ...

  8. 从UI Automation看Windows平台自动化测试原理

    前言 楼主在2013年初研究Android自动化测试的时候,就分享了几篇文章 Android ViewTree and DecorView Android自动化追本溯源系列(1): 获取页面元素 An ...

  9. MQTT服务器的搭建(Windows平台)

    人工智能.智能家居越来越火,在服务器和多个终端进行通信的过程中使用传统的请求/回答(Request/Response)模式已经过时,伴随而来的是发布/订阅(Publish/Subscribe)模式-- ...

随机推荐

  1. 拿到BAT等大厂offer以后,我发现了关于秋招的一些真相

    关于秋招的一些真相 ​ 微信公众号[程序员江湖] 作者陆小凤,985 软件硕士,阿里 Java 研发工程师,在技术校园招聘.自学编程.计算机考研等方面有丰富经验和独到见解,目前致力于分享程序员干货和学 ...

  2. 《JavaScript总结》apply、call和bind方法

    在JavaScript中,apply.call.bind这个三个方法,它们的作用都是为了改变某个函数运行时的上下文, 也就是改变函数体内的this指向. 在一个函数里,存在“定义时上下文”.“运行时上 ...

  3. shell运算符与流程控制-2

    1.shell运算符 1.1.算数运算符 原生的bash不支持算数运算,可以通过其它方式实现例如expr. `expr a + b` #a b为数字,和运算符之间要有空格 #``不是单引号,为键盘上E ...

  4. 详解网络编程必会的poll和epoll函数

    前言 之前已经介绍过select函数,请参考这篇博客:https://www.cnblogs.com/liudw-0215/p/9661583.html,原理都是类似的,有时间先阅读下那篇博客,以便于 ...

  5. ZOJ Problem Set - 1730 Crazy Tea Party

    #include<cstdio> int main(){ int T,n; scanf("%d",&T); while(T--){ scanf("%d ...

  6. JVM的类加载

    一.基本类加载机制介绍 大体引用一下<深入理解Java虚拟机>一书中对类加载的定义:虚拟机将描述类的二进制字节流(即Class文件)加载到内存中,并对其进行验证.准备.解析.初始化,最终 ...

  7. 2.ES6引进的新特性——类Class

    为什么? ES6中引入了类,类在java/c++等面向对象的编程语言常见,JS引入类是为了在日后使用js开发大型的应用程序,类本质是语法糖(语法上更加人性化) 以前写一个类 function User ...

  8. 【SQL跟踪工具】SQL Profiler 跟踪器

    什么是SQL Profiler SQL Server Profiler 是一个功能丰富的界面,用于创建和管理跟踪并分析和重播跟踪结果. 事件保存在一个跟踪文件中,稍后试图诊断问题时,可以对该文件进行分 ...

  9. Python系列:一、Python概述与环境安装--技术流ken

    Python简介 Python是一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项 ...

  10. 特征脸是怎么提取的之主成分分析法PCA

    机器学习笔记 多项式回归这一篇中,我们讲到了如何构造新的特征,相当于对样本数据进行升维. 那么相应的,我们肯定有数据的降维.那么现在思考两个问题 为什么需要降维 为什么可以降维 第一个问题很好理解,假 ...